我正在用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中工作。
答案 0 :(得分:2)
原来的解决方案是在base_url='.'
中添加weasyprint.HTML()
:
HTML(string=html_out, base_url='.').write_pdf(outfile)
并使用png
个文件代替pdf
个数字。