一尘不染

如何在Django / Python中自动填充PDF表单?

django

我有一些PDF表单,我想用Django Web应用程序中的数据自动填充,然后提供给用户下载。哪个python库可以让我轻松地预填充PDF表单?这些表格旨在打印出来。


阅读 748

收藏
2020-03-28

共1个答案

一尘不染

如果你要生成非常动态的PDF,并且需要以编程方式控制所有PDF(数据和布局),则Reportlab非常有用。

仅在现有的PDF中填写表格,reportlab是过大的,基本上,你将不得不在reportlab中从头开始重建PDF,而不仅仅是用已经制成的表格来获取PDF。

PDF表单可处理FDF数据。不久前,我将PHP FDF库移植到Python并将其发布为fdfgen。我用它来生成带有表单数据的fdf文件,然后使用pdftk将fdf推入PDF表单并生成输出。

整个过程如下:

  1. 你(或设计者)使用Acrobat或其他工具设计PDF并标记表单字段并记下字段名称(我不确定具体如何完成;我们的设计师执行此步骤)。假设你的表单具有字段“名称”和“电话”。
  2. 使用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()
  1. 然后运行pdftk进行合并和展平:
pdftk form.pdf fill_form data.fdf output output.pdf flatten

并在其中填充,拼合(意味着不再有可编辑的表单字段)pdf将出现在output.pdf中。

这有点复杂,并且安装pdftk可能很麻烦(需要Java堆栈,并且必须解决Ubuntu 9.10上的错误),但这是我能够想到的最简单的过程,而且工作流程这很方便(即,我们的设计人员可以对所需的PDF进行所有布局更改,并且只要不更改字段名称,我就可以放下新的PDF,一切都会正常进行)。

对于缺少有关fdfgen的文档,我深表歉意。forge_fdf()实际上是你唯一需要的功能,并且它具有一个文档字符串来解释参数。我只是从来没有完全围绕它做更多的事情。

2020-03-28