如何在Django中获取渲染模板并通过pdfkit转换为PDF?
解决Django模板转PDF(pdfkit)内容异常的问题
嘿,我完全懂你遇到的麻烦——你直接用pdfkit.from_file()加载Django模板文件,结果生成的PDF内容异常,大概率是因为模板里的Django语法(变量、循环、模板标签这些)根本没被渲染,pdfkit只是把原始的模板代码原封不动转成了PDF,自然不是你想要的结果。
下面给你一步步解决的方案:
第一步:先渲染Django模板为HTML字符串
Django自带的render_to_string工具可以帮你把模板和上下文数据结合,生成完整的HTML内容,这才是pdfkit该处理的东西。
from django.template.loader import render_to_string # 准备模板需要的上下文数据——就是你模板里用到的所有变量 context = { 'table_data': your_table_dataset, # 替换成你实际的表格数据 'page_title': '我的自定义表格', # 其他模板里用到的变量都要在这里定义 } # 渲染模板成完整的HTML字符串 # 路径用Django模板的相对路径即可,不用写全路径 rendered_html = render_to_string('app/table.html', context)
第二步:用pdfkit渲染已生成的HTML字符串
现在用pdfkit.from_string()方法,把刚才渲染好的HTML字符串转成PDF,这时候内容就会是你预期的样子了:
import pdfkit # 直接从渲染好的HTML字符串生成PDF pdfkit.from_string(rendered_html, 'table.pdf')
额外的注意事项
- 静态资源路径问题:如果你的模板里用到了CSS、图片,要确保这些资源的路径能被pdfkit依赖的wkhtmltopdf访问到。可以把静态资源换成绝对路径,或者在上下文里传入完整的静态资源URL。比如模板里的
{% static 'css/table.css' %}渲染后要变成wkhtmltopdf能找到的路径。 - wkhtmltopdf配置:如果pdfkit还是有问题,可能是wkhtmltopdf没装好或者路径没配置对,可以手动指定它的路径:
config = pdfkit.configuration(wkhtmltopdf='/usr/local/bin/wkhtmltopdf') # 换成你实际的安装路径 pdfkit.from_string(rendered_html, 'table.pdf', configuration=config)
内容的提问来源于stack exchange,提问作者lhd93
相关产品推荐
相关产品推荐

