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

Bra*_*nut 6 php xfa livecycle pdftk

我在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");
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Bru*_*gie 9

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填充和展平"的开源工具.