如何在Django/Python中自动填充PDF表单?
我有一些PDF表单,我想自动填充来自Django web应用程序的数据,然后提供给用户下载。什么python库可以让我轻松地预填充PDF表单?这些表格是要打印出来的。试试看 还有,看一看如何在Django/Python中自动填充PDF表单?,python,django,Python,Django,我有一些PDF表单,我想自动填充来自Django web应用程序的数据,然后提供给用户下载。什么python库可以让我轻松地预填充PDF表单?这些表格是要打印出来的。试试看 还有,看一看 编辑 我有另一个想法(但如果你已经有了PDF文件,那就没用了,我更喜欢@thraxil的答案) 今年早些时候,我参与了一个项目,为继续教育课程生成了“结业证书”。我考虑的一个角度是,试图直接从一个适当样式的网页(类似于服务器端的“打印到PDF”)生成PDF 我找到的其中一个工具是。它是一个独立的WebKit浏
编辑 我有另一个想法(但如果你已经有了PDF文件,那就没用了,我更喜欢@thraxil的答案) 今年早些时候,我参与了一个项目,为继续教育课程生成了“结业证书”。我考虑的一个角度是,试图直接从一个适当样式的网页(类似于服务器端的“打印到PDF”)生成PDF 我找到的其中一个工具是。它是一个独立的WebKit浏览器,可以将URL转换为PDF格式,并且效果非常好 其思想是使用django的模板引擎将包含您想要的任何内容(包括图像)的页面组合在一起,将其url传递给wkhtmltopdf,获取输出并将其返回给用户
我喜欢这种方法,因为它的实现非常简单(只需打开一个管道),您不必担心服务器可以访问源PDF文件,而且您可以通过更改HTML重新设计PDF 如果您正在生成非常动态的PDF,并且需要以编程方式控制所有PDF:数据和布局,那么Reportlab非常棒 为了在现有的PDF中只填写表单,reportlab是一种过火的做法,您基本上必须在reportlab中从头开始重新构建PDF,而不是只使用已经制作好的表单来获取PDF PDF表单处理数据。不久前,我将一个PHPFDF库移植到Python中,当时我不得不这样做,并将其发布为。我使用它生成一个包含表单数据的fdf文件,然后使用它将fdf推入PDF表单并生成输出 整个过程如下:
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 form.pdf fill_form data.fdf output output.pdf flatten
output.pdf中会有一个填充的、扁平的(意味着不再有可编辑的表单字段)pdf很抱歉没有关于fdfgen.forgeu fdf()的文档是您真正需要的唯一函数,它有一个docstrings来解释参数。我只是从来没有足够的时间来使用它来做更多的工作。还要看看这个代码段,它是一个现成的解决方案,用于在django中创建pdf视图,它建立在上述Thraxil解决方案的基础上。感谢github用户Zyefryed
+1为了提及伟大的实用程序-
wkhtmltopdf
。它使程序员能够用html/css设计文档,并转换为质量非常好的PDF。在尝试此示例代码时,我遇到以下错误:UnicodeEncodeError:“ascii”编解码器无法在位置10-13编码字符:序号不在范围内(128)尝试使用utf编写文件:“fdf_file=codecs.open”(“data.fdf”、“w”、“utf-8”)。您必须“导入编解码器”"首先。我还发现了特殊字符编码的问题,我将向作者报告。+1,如果可以的话,还有更多。感谢你的fdfgen。我成功地从CSV文件中批量填充了大量表单。这太棒了,非常感谢你的贡献,thraxil。对其他人说一句警告的话,我无法从亚太地区运行pdftkhe2 WSGI网站,它将被阻止,因为Apache2将向子进程命令返回一个被阻止的信号。我必须设置芹菜以在Apache2外部进行调用。然后从调用视图方法中,我必须获取task.delay().get()等待响应-同步。有关更多详细信息,请参阅:。再次感谢!Hello@thraxil,此贡献非常有用。我只是想知道如何从一组复选框中选择特定复选框?例如,在图像中:,我有一个名为type_of_ownership的字段,其中有六个复选框,我想选择“Limited”“责任”。我如何将参数传递给forge_fdf函数(可能是fdf_数据_名称)?请使用格式返回,因为我被困在这里。提前感谢您!