使用Ruby填写PDF表单

13

我正在尝试使用Ruby编程来自动填写PDF。该PDF具有允许输入文本的字段:

pdf字段的截屏

过去,我曾成功地使用pdftk通过pdf_form gem,但它无法在这个特定的PDF中找到字段:

$ pry
[1] pry(main)> require 'pdf_forms'
=> true
[2] pry(main)> pdftk = PdfForms.new('/usr/local/bin/pdftk')
=> #<PdfForms::PdftkWrapper:0x007fece7af6d98 @options={}, @pdftk="/usr/local/bin/pdftk">
[3] pry(main)> pdftk.get_field_names('designation.pdf')
=> []
我如何使用 Ruby 填写 PDF?

我似乎无法从您在原始帖子中提供的链接中获取实际的PDF文件。您是否知道文档中使用了哪种类型的PDF表格?有几种不同的类型,而这个特定的可能不受支持。 - Vel Genov
没试过,但你可能想尝试一下 https://github.com/abevoelker/pdf_ravager [注意:仅支持Jruby] - Nimir
1
PDF文件包含一个纯XFA表单(XFA表单不是PDF规范的一部分,因此并不被普遍支持)。 - mkl
3个回答

9
PdfTk只是使用GCJ编译的iText强大而古老的版本。只要表单使用AcroForm技术定义字段,就可以使用PdfTk填写表单。但你提到的表单不是这种情况。我已在iText RUPS中打开了该表单,在“表单”选项卡中看到以下内容:

enter image description here

你看到了/Fields数组吗?它是空的:[]。这意味着PdfTk没有可以填写的内容。那么表单在哪里?
表单使用XML表单体系结构(XFA)进行描述。很少有软件产品可以填写XFA表单。实际上,很少有PDF查看器允许您查看表单。例如,当我在浏览器中打开表单时,我看到的是:

enter image description here

我知道两个产品线可以满足您的需求:
  1. Adobe软件:例如Adobe LiveCycle ES。
  2. iText软件:您可以使用iText的AGPL版本通过注入XML来填写表单(请参见如何在iTextSharp中设置静态XFA表单中的XFA数据并使其保存?);您可以使用iText的XFA Worker来平铺表单(请参见如何使用iTextSharp平铺XFA PDF表单?)。
作为iText Group的CEO,我建议使用iText(如果您使用PdfTk,则已经使用了旧版本)。 iText可用作Java库,因此使用JRuby是满足您要求的最佳选择。
另一个选择是将表单完全重新设计为基于AcroForm技术而不是XFA技术的表单。

6

pdf-form gem只适用于由Adobe Acrobat生成的PDF文件。请参考此问题

请确保在您的PDF中,通过Adobe Acrobat创建文本字段


pdftk在El Capitan 10.11上安装失败。 - Rich_F
修复详见此处:https://gist.github.com/jvenator/9672772a631c117da151#gistcomment-1607813 - rylanb

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接