使用 Python 将 HTML/CSS/Javascript 文件转换为 PDF

Convert a HTML/CSS/Javascript file to PDF using Python?

本文关键字:文件 转换 PDF Javascript CSS Python HTML 使用      更新时间:2023-09-26

我需要将HTML+CSS+Javascript文件从Django视图转换为PDF,从而使用Python。

我可以使用xhtml2pdf/PISA,但它只支持HTML和CSS,不支持Javascript,这是必需的。

另一种选择是py-wkhtmltox,但它已经很老了,我还没有能够让它工作,我只是得到"导入错误:libwkhtmltox.so.0:无法打开共享对象文件:没有这样的文件或目录",不确定从哪里获取该文件,然后只是突然重命名 libwkhtmltox.so libwkhtmltox.so.0,但后来我只是得到:

Traceback (most recent call last):
  File "pdf_test1.py", line 5, in <module>
    pdf.set_object_setting('path', 'http://www.google.com')
  File "wkhtmltox.pyx", line 118, in wkhtmltox.Pdf.__getattr__ (wkhtmltox.c:1228)
AttributeError: 'wkhtmltox._Pdf' object has no attribute 'set_object_setting'

另一种选择是使用 webkit ( http://bharatikunal.wordpress.com/2010/01/31/converting-html-to-pdf-with-python-and-qt/),但我无法从 Django 视图中执行"sys.exit(app.exec_())"。

我现在唯一能想到的就是从django视图创建一个单独的webkit python脚本和os.system,使"sys.exit(app.exec_())"成为可能,从而产生PDF的结果。但是我对其他建议持开放态度,从django的角度来看使用os.system有点奇怪。

有什么想法吗?

我建议使用wkhtmltopdf。它可以作为 Linux 的静态二进制文件使用,因此您不应该遇到任何共享对象问题。wkhtmltopdf 包装了 webkit 并支持 JavaScript,你甚至可以告诉它在渲染发生之前运行任何 JS 代码多长时间。我已经成功地使用它来制作带有一些复杂图表生成代码的页面的PDF。只需使用 subprocess.call() .