填充数据库中的PDF字段

pwa*_*ing 3 pdf

我有一个PDF文件(不是由我创建的 - 我无法控制设计等),它允许用户在Adobe Reader中填写一些表单字段并保存结果.我想使用以下步骤自动化填充字段的过程:

  1. 从数据库中获取数据.
  2. 打开PDF模板.
  3. 使用数据填充表单字段.
  4. 将修改后的文件保存到磁盘上的单独位置.
  5. 锁定已修改的文件,以便无法再编辑表单域.
  6. 将文件发送给用户.

我很高兴使用PHP,Perl,Python或Java来执行步骤2-5(按优先级降序排列),但我使用的任何东西都必须在Linux下工作(即它不能依赖于仅在例如Windows).

最终的结果应是普通用户可以打开和打印,但不能修改(我敢肯定,高级用户可以找到一种方法,这样做,但我承认,我不能保证对修改完善的安全)的PDF文件.我不想改变PDF的结构,只是填充表单字段.

这样做有标准的软件吗?我已经看过FDF Toolkit的提及,但我不完全确定这是否是我想要的,以及它是否允许我之后锁定文件,以及我想做的是否适合EULA.

编辑:最后的答案是使用iText的(由Mark斯托勒的建议),但实现它作为一个Web服务,它允许你在表单字段名称和值和PDF文件的"样板"的数组通过.根据AGPL,Web服务将是开源的(并且在我编写之后可以在GitHub上获得),但是连接到它的任何东西都不一定是.

Mar*_*rer 5

填充

任意数量的不同库都可以填写字段值.我偏爱iText(java)或iTextSharp(c#).几年前我用Java写过一篇.这并不难.有很多.搜索SO,你会找到他们.

锁定

有几个不同级别的"锁定领域".

  • 每个字段都有一个"只读"标志.就其他能够设置字段值的库而言,这几乎是一种礼貌.事实上,它通常被认为是指"ui无法做出改变".表单脚本可以,无论如何.
  • 表单展平:直接将字段绘制到页面中并删除所有交互性.

每个人都有利弊.

旗帜:没有太安全.表单数据仍然易于访问.滚动字段仍会滚动.
扁平化:几乎完全相反.修改起来比较困难(虽然远非重要).表单数据只能通过文本提取来提取(这很难,但变得越来越普遍).包含比可见内容更多的内容的列表和文本字段将不再滚动.

压扁形式的能力相对较少.同样,iText可以做到这一点(就像iTextSharp一样),但我不知道任何其他第三方库可以......我确信它们存在,我只是无法将它们命名为我的头脑.