【发布时间】:2010-12-25 19:45:15
【问题描述】:
我有 PDF 表单,我想用我的 Django Web 应用程序中的数据自动填充,然后提供给用户下载。什么 python 库可以让我轻松地预填充 PDF 表单?这些表格旨在打印出来。
【问题讨论】:
我有 PDF 表单,我想用我的 Django Web 应用程序中的数据自动填充,然后提供给用户下载。什么 python 库可以让我轻松地预填充 PDF 表单?这些表格旨在打印出来。
【问题讨论】:
如果您要生成非常动态的 PDF,并且需要以编程方式控制所有这些 PDF:数据和布局,那么 Reportlab 非常棒。
仅填写现有 PDF 中的表格,reportlab 是多余的,您基本上必须在 reportlab 中从头开始重建 PDF,而不是仅使用已经制作的表格获取 PDF。
PDF 表单使用 FDF 数据。不久前,当我不得不这样做时,我将一个 PHP FDF 库移植到 Python,并将其发布为 fdfgen。我使用它来生成包含表单数据的 fdf 文件,然后使用pdftk 将 fdf 推送到 PDF 表单并生成输出。
整个过程是这样的:
使用 fdfgen 创建 FDF 文件:
from fdfgen import forge_fdf
fields = [('name','John Smith'),('telephone','555-1234')]
fdf = forge_fdf("",fields,[],[],[])
fdf_file = open("data.fdf","w")
fdf_file.write(fdf)
fdf_file.close()
然后你运行 pdftk 来合并和展平:
pdftk form.pdf fill_form data.fdf output output.pdf flatten
一个填写好的、展平的(意味着不再有可编辑的表单域)pdf 将在 output.pdf 中。
这有点复杂,安装 pdftk 可能会很麻烦(需要一个 Java 堆栈,并且 Ubuntu 9.10 上有一些错误需要解决)但这是我能想到的最简单的过程并且工作流程很方便(即,我们的设计人员可以对 PDF 进行所有他们想要的布局更改,只要他们不更改字段的名称,我就可以将新的放入其中并且一切正常)。
对于 fdfgen 上缺少文档,我深表歉意。 forge_fdf() 确实是您应该需要的唯一函数,它有一个文档字符串来解释参数。我只是一直没有时间用它做更多的事情。
【讨论】:
试试reportlab。
另外,请访问Outputting PDFs。
我有另一个想法(但如果您已经拥有 PDF 文件,这将无济于事,而且我更喜欢 @thraxil 的回答)。
今年早些时候,我参与了一个为继续教育课程生成“结业证书”的项目。我看到的一个角度是尝试直接从适当样式的网页(类似于服务器端“打印到 PDF”)生成 PDF。
我发现的其中一个工具是wkhtmltopdf。它是一个独立的 WebKit 浏览器,可以将 URL 转换为 PDF,并且效果非常好。
这个想法是您使用 django 的模板引擎将包含您想要的任何内容(包括图像)的页面放在一起,将其 url 传递给 wkhtmltopdf,获取输出并将其返回给用户。
我喜欢这种方法,因为它实现起来非常简单(只需打开一个管道),您不必担心保持服务器可以访问源 PDF 文件,并且可以通过更改 HTML 来重新设计 PDF。
【讨论】:
wkhtmltopdf。它使程序员能够以html/css设计文档,并转换为非常质量好的PDF。
还可以查看此代码段,它是在 django 中创建 pdf 视图的现成解决方案,它基于 Thraxil 的上述解决方案。感谢 github 用户 zyegfryed。
【讨论】: