PDFTK在填写由Livecycle创建的PDF表单时无法使用

9
我在 LiveCycle ES 2 中创建了一个表单,现在想使用 pdftk 来填写它,但是似乎无法生效。虽然 pdftk 显示填写成功,但当我试图打开 PDF 文件时,却遇到了错误提示:“如果此消息最终未被文档的正确内容替换,则您的 PDF 查看器可能无法显示此类文档。”
以下是我用来填写 PDF 的代码:
<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);

$Clicks = "567";
$Impressions = "43,434";
$Cost = "$45.44";

$fdf = '%FDF-1.2
1 0 obj<</FDF<< /Fields[
<</T(Clicks)/V('.$Clicks.')>>
<</T(Impressions)/V('.$Impressions.')>>
<</T(Cost)/V('.$Cost.')>>
] >> >>
endobj
trailer
<</Root 1 0 R>>
%%EOF';

file_put_contents('fields.fdf', $fdf);

$results = shell_exec("pdftk REPORT.pdf fill_form fields.fdf output FINAL_REPORT.pdf flatten");

在做了一些研究后,我发现使用LiveCycle创建的PDF表格是作为XFA表单而不是AcroForms创建的。不确定它们之间的区别,但是否有人做过类似的事情并且能够使其正常工作呢?谢谢。
3个回答

11

PDF有两种交互式表单:

  • AcroForm技术:在这种情况下,表单使用PDF语法定义。所有字段都有固定的坐标,无法动态变化。如果数据不适合,则字段不会增长。如果有更少的数据,则空间不够,字段不会缩小。通常使用Adobe Acrobat、OpenOffice等创建此类表单。
  • XML Forms Architecture:在这种情况下,PDF作为XML的容器。数据使用您选择的模式格式化为XML。表单使用与数据模式相对应的XML进行描述。由于XML在打开文档时呈现,因此表单可以非常动态。它们可以适应数据(与AcroForms相反,其中数据必须适应表单)。这样的表单是使用Adobe LiveCycle Designer创建的。

在您的问题中,我看到您正在使用Forms Data Format(FDF)。 FDF是与AcroForm技术兼容的格式。它与XFA不兼容。要填写XFA表单,需要注入XML文件,而不是FDF文件。

PdfTk是基于过时版本的iText的命令行工具。这个iText版本是在支持XFA功能之前发布的。这意味着您将无法使用PdfTk填写在LiveCycle中创建的表单。

由于PdfTk的创建者和iText的所有者之间不存在业务关系(我是这些所有者之一),因此PdfTk几乎不可能支持XFA。iText Software提供了一个名为XFA Worker的工具,但它是在iText之上编写的闭源插件。我不知道是否有任何开源工具支持“XFA填充和平坦化”。


我也想要一个XFA填充和平坦化的开源工具!无论如何,感谢您的解释。 - iurisilvio

3

我也有同样的经历。我使用pdftk近10年来填写PDF表格并将其转换为没有表格的PDF文件。

今天我才发现如何在最新版本的LiveCycle Designer ES4 (v.11)中实现这一点。

  1. 文件->表单属性->兼容性
  2. 点击每个还原按钮
  3. 然后,您必须将PDF保存为静态PDF表单 (而不是动态XML表单)

以下是一些屏幕截图。 enter image description here

enter image description here

像往常一样运行您的pdftk命令,它应该可以正常工作。

我花了大部分时间来处理这个问题,因为我不得不从LifeCycle v.8 (在旧的XP VM上)升级到LifeCycle v.11。


我尝试了你的解决方法,但仍然无法使其正常工作。在这里创建了一个线程 http://stackoverflow.com/questions/36186051/using-pdftk-with-livecycle-es4-is-it-possible - Chad Priddle

3

我知道已经过了一段时间,但是如果有人正在研究这个问题,这里是我解决这个问题的方法:

首先,如果您不介意从文件中删除XFA格式,从而创建一个新的pdf“模板”来进行表单填充,则可以使用以下命令行删除额外的XML数据:

"pdftk xfa-pdf-form.pdf output acro-pdf-form.pdf drop_xfa"

如果这仍然给您带来麻烦,请从原始XFA文件开始,在LiveCylce中将文件保存为Adobe Static PDF表单。或者使用Acrobat X Pro也可以。然后重复上述步骤,调用命令行以删除XFA。

此时,您应该拥有常规的Acroform。

从这里开始,您将能够将输出文件的数据保存为XFDF或FDF。然后就像往常一样。

感谢@enriquein指引我正确的方向。


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