import os
import tempfile
import pdfkit
from django.template.loader import render_to_string
def render_pdf(template, context, output, header_template=None):
"""
Simple function for easy printing of pdfs from django templates
Header template can also be set
"""
html = render_to_string(template, context)
options = {
'--load-error-handling': 'skip',
}
try:
if header_template:
with tempfile.NamedTemporaryFile(suffix='.html', delete=False) as header_html:
options['header-html'] = header_html.name
header_html.write(render_to_string(header_template, context).encode('utf-8'))
return pdfkit.from_string(html, output, options=options)
finally:
# Ensure temporary file is deleted after finishing work
if header_template:
os.remove(options['header-html'])
5条答案
按热度按时间ddarikpa1#
我只使用它与标题,但我认为它将工作与页脚相同。
你需要有单独的html文件的标题。
header.html
然后可以在Python中这样使用它
如果你使用Django这样的后端,并且想使用模板,那么棘手的是你不能将头部html作为渲染字符串传递,你需要一个文件。
这就是我用Django渲染PDF的方法。
在我的例子中,我创建了一个临时文件来放置渲染的内容。重要的是,这个临时文件需要以
.html
结尾,并且需要手动删除。5lhxktic2#
改进@V Stoykov答案,因为它帮助我使用Flask,Flask中带有自定义标题的渲染函数如下所示:
注意,我使用了
'--header-html'
和'--footer-html'
表示法,因为它与wkhtmltopdf选项格式匹配。vd2z7a6w3#
您可以添加标头,这是
header-center
的值中所需的polkgigr4#
这个问题和它的答案是相当古老的,对我不起作用。
下载版本:$wkhtmltopdf--版本
wkhtmltopdf 0.12.6(已修补qt)
Python 3.8
对于wkhtmltopdf,
header-html
和footer-html
只能是URI,例如html url或文件路径,不能是字符串。因此,想法是将每个html文件保存在云上或在本地创建一个临时文件作为页脚和页眉以供参考。请求:
1.含量为
url
或html
1.标头为
html url
或html string
1.页脚为
html url
或html string
示例:
lc8prwob5#
Python pdfkit wrapper只支持html文件作为页眉和页脚,为了能够支持string,你所需要做的就是生成一个临时文件,并在关闭时删除它,下面是我的代码示例。
使用带有delete=True和suffix='.html'参数的临时文件将在temp.close()上生成可删除文件