使用 jinja2 和 weasyprint 的 PDF 渲染中忽略图像



我正在用python运行一个分析脚本,它给了我一些变量和一个图像,我将其保存为png文件。然后,我使用jinja2将它们填充到html模板中,并使用weasyprint将 html 呈现为我保存的 PDF 文件。

这里有许多问题可以解决这个问题,但没有一个建议的解决方案解决了我的问题。我需要向它提供图像的绝对路径,因为输出数据保存在本地磁盘的与生成它的代码完全不同的部分。许多提供的解决方案都建议使用类似的东西request.base_url(),但这似乎来自flask(我猜?)或实际构建应用程序而不是简单地构建 PDF 文件的东西。

从变量生成 PDF 文件的函数如下所示:

def create_pdf_report(varlist, outfile):
# Create Jinja environment and get template
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('<absolute-path-to-dir-with-template>'))
template = env.get_template('report_template.html')
# Render HTML with input variables
html_out = template.render(varlist)
# Generate PDF
from weasyprint import HTML
HTML(string=html_out).write_pdf(outfile)

模板是这样的:

<img src="{{ systematics_figure }}" alt="systematics" width="900" height="650">

我传入的varlist字典看起来像这样:

fig3_fname = '<absolute-path-to-image>'
varlist = {'systematics_figure': fig3_fname}

虽然我给它的普通变量渲染得很好,但图像没有显示;我得到它的alt文本。该过程完成正常,但我无法显示png图像。当我直接将绝对图像路径粘贴到 html 文件中并在浏览器中打开它时,它看起来很好。

我能做些什么来完成这项工作?

我使用的是macOS Sierra 10.12.6,并使用python 3.7.3。

事实证明,解决方案是在weasyprint.HTML()中添加base_url='.'

HTML(string=html_out, base_url='.').write_pdf(outfile)

并使用png文件而不是pdf数字。

最新更新