当前位置: 首页 > 面试题库 >

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

傅花蜂
2023-03-14
问题内容

我有一些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()
  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()实际上是你唯一需要的功能,并且它具有一个文档字符串来解释参数。我只是从来没有完全围绕它做更多的事情。



 类似资料:
  • 我有一个基于XFA的pdf表单,我们需要使用java来填充它。你能建议最好的方法吗。我能够使用iText为pdf生成xfa xml。 我有从上面的代码生成的Pdf和Xfa XML。你能不能建议我如何继续下去,因为我似乎没有主意了。我试图检查XFA文档,但似乎不对。我没有xml,pdf非常复杂,因为它有许多字段,是一个动态XFA pdf表单。 您的帮助和建议将受到衷心的感谢。

  • 我需要创建PDF表格,可以用来从用户的输入。它们需要包含下拉框和文本框。请建议哪种软件或工具最适合我的目的

  • 问题内容: 我决定学习Django Forms。一段时间以来,我一直在使用HTML表单,因为很难理解Django表单。 如何将初始数据填充到Django Forms?例: 考虑是否填充了这些模型。包含数据。 models.py 所以如果我有 view.py 所以在template.html中,我可以: 如果我想在使用HTML表单时填充初始数据,这通常是我要做的: 如何在Django表单中执行此操作

  • 当我使用这个长字段名时,我没有得到任何错误,但是得到的PDF不包含我放在字段中的值。我想可能字段名有问题,所以我使用了Pdftk工具,它只给出了作为字段名。但是当我仅仅使用它时,我会得到error。救命?

  • 我需要滚动表来获取使用selenium和java绑定以及chrome驱动程序动态填充的表内容。这是另一个滚动,而不是窗口滚动本身。我能找到的所有可用的解决方案都是针对窗口滚动的。我在这里需要的是滚动桌子。我需要滚动突出显示的那个 我收到以下错误消息 错误消息:没有这样的元素:找不到元素:{“method”:“XPath”,“Selector”:“//*[@class='antiscroll-scr

  • 问题内容: 就像是有什么,但对?我要显示的数据是使用的关联。 我已经尝试使用过,但是在这种情况下,我必须在hibernate状态下使用它,这需要我指定using,并且每当我检索到through时,列表中的元素之间都会有空格,具体取决于。 我需要自动填充集合,因为我需要在创建时动态生成。当我使用plain时,得到以下内容: 还有其他解决方案吗? 编辑 我正在尝试实现动态表格 问题答案: 您无法在MV