PDFTK无法填写在livecycle中创建的pdf表单

时间:2014-06-20 20:35:39

标签: php livecycle pdftk xfa

我在livecycle es 2中创建了一个表单,我正在尝试使用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");

在做了一些研究之后,我发现在实时循环中创建的pdf表单是作为XFA表单而不是acroforms创建的。不确定区别是什么,但是有人做过类似的事情并且能够让它发挥作用。

谢谢

3 个答案:

答案 0 :(得分:8)

PDF中有两种互动形式:

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

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

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

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

答案 1 :(得分:3)

我在同一条船上。我已经使用pdftk将近10年来填写PDF表格,然后将其展平为PDF文件(没有表格)。

我今天刚刚想出如何使用最新版本的LiveCycle Designer ES4(第11版)。

  1. 文件&GT;表格属性 - &gt;兼容性
  2. 点击每个 还原 按钮
  3. 然后您必须将PDF保存为静态PDF表单动态XML表单)
  4. 一些屏幕截图。 enter image description here

    enter image description here

    一如既往地运行你的pdftk命令,它应该可以工作。

    我花了一个上午的大部分时间讨论这个话题,因为我必须从LifeCycle v.8(在旧的XP VM上)升级到LifeCycle v.11。

答案 2 :(得分:3)

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

首先,如果您不介意从文件中删除XFA格式,从而创建一个新的pdf模板&#39;使用以下命令行填充表单,然后简单地删除额外的XML数据:

&#34; pdftk xfa-pdf-form.pdf输出acro-pdf-form.pdf drop_xfa&#34;

如果这仍然给您带来麻烦,请从原始XFA文件开始,在LiveCylce中将该文件另存为Adobe Static PDF表单。或者使用Acrobat X Pro我认为你也可以这样做。然后通过调用命令行drop_xfa重复上面的步骤。

此时你应该有一个常规的Acroform。

从这里,您可以将输出文件的数据保存为XFDF或FDF。然后照常营业。

感谢@enriquein,他指出了我正确的方向。