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

推荐答案

如果您正在生成非常动态的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()
    
  3. 然后运行pdftk以合并和展平:

    pdftk form.pdf fill_form data.fdf output output.pdf flatten
    

    在output.pdf中将出现一个填充的、扁平的(意味着不再有可编辑的表单域)pdf.

这有点复杂,而且pdftk安装起来可能会很痛苦(需要Java堆栈,而且Ubuntu9.10上有一些必须解决的错误),但这是我能想到的最简单的过程,工作流程也很方便(即,我们的设计师可以对他们想要的PDF进行所有布局更改,只要他们不更改字段名称,我就可以放入新的字段,一切都会正常工作).

我为缺少关于fdfgen的文件道歉.forge_fdf()实际上是您唯一需要的函数,它有一个文档字符串来解释参数.我只是从来没有抽出时间用它做更多的事情.

Django相关问答推荐

在Django中使用Generil.ListView类时,分页不起作用

Urls.py中路径**kwargs的Django翻译?

如何使更新记录在 Django 模型中传递信号?

在 Django 中重组多对多字段

查询 django 模型以找到当月最好的公司销售

在 Django 的 TextField 中禁用 HTML 转义

使用基于类的 UpdateView 在 Django 中更新用户模型

try 编辑/创建时,特定模型的 Django 管理员挂起(直到超时错误)

如何将 Django forms.ChoiceField 呈现为 Twitter Bootstrap 下拉菜单

如何在django中生成临时文件然后销毁

在 virtualenv Ubuntu 12.10 中使用 pip 安装 lxml 错误:command 'gcc' failed with exit status 4

Django 模板列表的第一个元素

在 Django 中使用 AuthenticationForm

django:manytomanyfield 和 through 如何出现在 admin 中?

Django 应用程序中的版本号

使用 Django 部署 Google Analytics

get_or_create() 是否必须立即保存?

UpdateView 中的success_url,基于传递的值

在 django 中获取空查询集的类名

django.core.servers.basehttp.FileWrapper 在 Django 1.9 中消失