我在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创建的。不确定区别是什么,但是有人做过类似的事情并且能够让它发挥作用。
谢谢
答案 0 :(得分:8)
PDF中有两种互动形式:
在您的问题中,我看到您正在使用表单数据格式(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版)。
一些屏幕截图。
一如既往地运行你的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,他指出了我正确的方向。