我有PDF表单,我想用我的Django Web应用程序中的数据自动填充,然后提供给用户下载.什么python库可以让我轻松预先填充PDF表单?这些表格打算打印出来.
如果您生成非常动态的PDF并且需要以编程方式控制所有这些内容,那么Reportlab非常棒:数据和布局.
要仅填写现有PDF中的表单,reportlab是过度的,您基本上必须在reportlab中从头开始重建PDF,而不是仅仅使用已经制作的表格获取PDF.
PDF表单适用于FDF数据.当我不得不这样做并将其作为fdfgen发布时,我将PHP FDF库移植到Python .我使用它来生成包含表单数据的fdf文件,然后使用pdftk将fdf推送到PDF表单并生成输出.
整个过程如下:
您(或设计师)在Acrobat或其他任何地方设计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()实际上是你应该需要的唯一函数,它有一个docstrings来解释参数.我从来没有完全用它做更多的事情.
试试reportlab.
另外,请注意输出PDF.
我有另一个想法(但如果你已经拥有PDF文件,那将无济于事,我更喜欢@thraxil的答案).
今年早些时候,我参与了一个项目,在那里我为继续教育课程制作了"完成证书".我看到的一个角度是试图直接从适当风格的网页生成PDF(类似于服务器端"打印到PDF").
我找到的工具之一是wkhtmltopdf.它是一个独立的WebKit浏览器,可以将URL转换为PDF,并且效果非常好.
我们的想法是你使用django的模板引擎将包含你想要的任何内容(包括图像)放在一起,将它的url传递给wkhtmltopdf,获取输出并将其返回给用户.
我喜欢这种方法,因为它实现起来非常简单(只需打开一个管道),您不必担心服务器可以访问源PDF文件,您可以通过更改HTML来重新设计PDF.
另请参阅此代码段,这是一个现成的解决方案,用于在django中创建pdf视图,该视图基于上面的Thraxil解决方案.感谢github用户zyegfryed.
https://gist.github.com/918403