8

我在 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。不知道有什么区别,但有没有人做过类似的事情并能够让它工作。

谢谢

4

3 回答 3

10

PDF中有两种交互形式:

  • AcroForm 技术:在这种情况下,表单是使用 PDF 语法定义的。所有字段都有固定的坐标。它们不能动态改变。如果数据不合适,字段就不会增长。如果数据少,那么就有空间,字段不会缩小。此类表单通常使用 Adob​​e Acrobat、OpenOffice、...
  • XML 表单架构:在这种情况下,PDF 用作 XML 的容器。使用您选择的模式将数据格式化为 XML。该表单使用与您的数据架构相对应的 XML 进行描述。由于 XML 在文档打开时呈现,因此表单可以是非常动态的。它们可以适应数据(与数据必须适应表单的 AcroForms 不同)。此类表单是使用 Adob​​e LiveCycle Designer 创建的。

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

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

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

于 2014-06-21T07:53:22.920 回答
3

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

我今天刚刚弄清楚如何使用最新版本的 LiveCycle Designer ES4 (v.11) 进行这项工作。

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

几个屏幕截图。 在此处输入图像描述

在此处输入图像描述

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

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

于 2015-02-03T16:49:54.577 回答
3

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

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

“pdftk xfa-pdf-form.pdf 输出 acro-pdf-form.pdf drop_xfa”

如果这仍然给您带来麻烦,请从原始 XFA 文件重新开始,并在 LiveCylce 中将文件保存为 Adob​​e 静态 PDF 表单。或者使用 Acrobat X Pro 我想你也可以做到这一点。然后重复上述步骤,通过调用命令行到 drop_xfa。

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

从这里您将能够将输出文件的数据保存为 XFDF 或 FDF。然后一切照旧。

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

于 2015-02-20T17:44:46.327 回答