当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在Django/Python中自动填充PDF表单?》经验,为你挑选了3个好方法。

我有PDF表单,我想用我的Django Web应用程序中的数据自动填充,然后提供给用户下载.什么python库可以让我轻松预先填充PDF表单?这些表格打算打印出来.



1> thraxil..:

如果您生成非常动态的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来解释参数.我从来没有完全用它做更多的事情.


尝试使用utf编写文件:"fdf_file = codecs.open("data.fdf","w","utf-8")".你必须先"导入编解码器".我还发现了特殊字符编码的问题,我将向作者报告.

2> Seth..:

试试reportlab.

另外,请注意输出PDF.


编辑

我有另一个想法(但如果你已经拥有PDF文件,那将无济于事,我更喜欢@thraxil的答案).

今年早些时候,我参与了一个项目,在那里我为继续教育课程制作了"完成证书".我看到的一个角度是试图直接从适当风格的网页生成PDF(类似于服务器端"打印到PDF").

我找到的工具之一是wkhtmltopdf.它是一个独立的WebKit浏览器,可以将URL转换为PDF,并且效果非常好.

我们的想法是你使用django的模板引擎将包含你想要的任何内容(包括图像)放在一起,将它的url传递给wkhtmltopdf,获取输出并将其返回给用户.

我喜欢这种方法,因为它实现起来非常简单(只需打开一个管道),您不必担心服务器可以访问源PDF文件,您可以通过更改HTML来重新设计PDF.



3> joshua..:

另请参阅此代码段,这是一个现成的解决方案,用于在django中创建pdf视图,该视图基于上面的Thraxil解决方案.感谢github用户zyegfryed.

https://gist.github.com/918403

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有