使用Ruby填写PDF表单

时间:2015-11-10 02:28:17

标签: ruby pdf pdftk

我尝试使用ruby以编程方式填写pdf。 pdf包含允许输入文本的字段:

screenshot of pdf fields

过去我通过pdftk gem使用pdf_form取得了成功,但是在这个特定的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?

3 个答案:

答案 0 :(得分:6)

PdfTk只不过是使用GCJ编译的强大旧版iText。只要表单包含使用AcroForm技术定义的字段,就可以使用PdfTk填写表单。对于您所指的表格,情况并非如此。我在iText RUPS打开了表单,这是我在“表单”选项卡中查看时看到的内容:

enter image description here

你看到/Fields阵列吗?它是空的:[]。这意味着PdfTk没有任何内容可以填写。那表格在哪里?

使用XML Forms Architecture(XFA)描述表单。周围没有很多软件产品可以填写XFA表格。哎呀,没有很多PDF查看器可以让你查看表格。例如,这是我在浏览器中打开表单时看到的内容:

enter image description here

我知道有两种产品系列可以满足您的需求:

  1. Adob​​e软件:例如Adobe LiveCycle ES。
  2. iText软件:您可以通过注入XML填写表格和iTPL的AGPL版本(参见How can I set XFA data in a static XFA form in iTextSharp and get it to save?);您可以使用iText的XFA Worker来展平表单(请参阅How can I flatten a XFA PDF Form using iTextSharp?)。
  3. 作为iText Group的首席执行官,我建议使用iText(如果您使用的是PdfTk,那么您已经使用旧版本了)。 iText作为Java库提供,因此使用JRuby是您满足需求的最佳机会。

    另一种选择是将表单完全重新设计为基于AcroForm技术而非XFA技术的表单。

答案 1 :(得分:5)

pdf-form gem仅适用于 Adob​​e Acrobat 生成的pdf。请按照issue

进行操作

确保在 PDF 中,您通过adobe acrobat创建了文本字段

答案 2 :(得分:3)

恐怕你可能被迫使用JRuby和iText。我过去做过类似的事情,iText似乎是处理复杂PDF文件的最佳库。

http://www.mikeperham.com/2011/02/15/filling-out-pdf-forms-with-jruby/