You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Heroku安装pdfLaTeX?Flask转PDF工具报错求助

解决Heroku上Flask Markdown转PDF的pypandoc报错问题

这个报错我之前踩过坑!本质原因是Heroku默认的Python运行环境里既没装pandoc,也没有pdfLaTeX这类TeX工具——pypandoc依赖系统级的pandoc,而pandoc生成PDF又必须靠pdfLaTeX引擎支撑,所以才会出现Pandoc异常退出的内部服务器错误。

下面是一步步的解决流程:

1. 添加Heroku Buildpacks安装系统依赖

Heroku支持通过buildpack安装系统级工具,我们需要添加三个buildpack(注意顺序,先Python环境,再TeX工具,最后Pandoc):

打开终端进入项目根目录,执行以下命令:

# 先添加官方Python buildpack,保证Python环境优先配置
heroku buildpacks:add --index 1 heroku/python
# 添加TeX Live buildpack,用来安装pdfLaTeX
heroku buildpacks:add --index 2 https://github.com/TeX-Live/heroku-buildpack-tex.git
# 添加Pandoc buildpack,安装pandoc工具
heroku buildpacks:add --index 3 https://github.com/jgm/heroku-buildpack-pandoc.git

2. 配置TeX Live的必要安装包

在项目根目录创建一个texlive.packages文件,只填写基础的LaTeX包(避免安装整个TeX Live导致slug超过Heroku的500MB限制),内容可以是:

texlive-latex-base
texlive-fonts-recommended
texlive-latex-extra

这几个包足够支撑基础的PDF转换需求,如果你需要特殊字体或功能,再补充对应的包即可。

3. 调整Flask代码中的pypandoc调用

确保转换代码指定了正确的PDF引擎(推荐用xelatex,支持更多字体),示例代码参考:

import pypandoc
from flask import Flask, request, send_file
import os

app = Flask(__name__)

@app.route('/convert', methods=['POST'])
def md_to_pdf():
    # 处理上传的Markdown文件
    md_file = request.files.get('md_file')
    if not md_file:
        return "未上传文件", 400
    
    # 临时保存文件(Heroku只有/tmp目录可写)
    md_path = os.path.join('/tmp', md_file.filename)
    md_file.save(md_path)
    output_pdf = os.path.join('/tmp', 'output.pdf')

    try:
        # 指定xelatex引擎生成PDF
        pypandoc.convert_file(
            md_path,
            'pdf',
            outputfile=output_pdf,
            extra_args=['--pdf-engine=xelatex']
        )
        return send_file(output_pdf, as_attachment=True, download_name='result.pdf')
    except Exception as e:
        app.logger.error(f"转换失败: {str(e)}")
        return "转换出错", 500

4. 部署测试

把texlive.packages、更新后的代码以及包含pypandoc的requirements.txt提交到Git,然后部署到Heroku:

git add .
git commit -m "Add TeX and Pandoc support for PDF conversion"
git push heroku master

部署完成后,可以通过日志确认依赖是否安装成功:

heroku logs --tail

如果没有报错,你的Markdown转PDF功能就能正常运行了!

内容的提问来源于stack exchange,提问作者goFrendiAsgard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:57:01