我使用的是fpdf的“表格填写”脚本。org来填充我创建的PDF表单上的一些字段。这似乎工作正常。
我希望生成的PDF表单被展平,以便用户无法编辑表单字段。为此我使用PDFTK。但是,当我尝试展平PDF时,我得到一个表单字段为空的PDF。
关于如何使PDF扁平化(使用PHP)的任何建议都将不胜感激。谢谢!
这是我的代码:
<?php
require('fpdm.php');
$fields = array("Name" => "John Doe",
"Address" => "123 White Lane",
"Age" => "30",
"Phone" => "123-1234");
$pdf = new FPDM("templates/Test.pdf");
$pdf->Load($fields, true);
$pdf->Merge();
$pdf->Output("cache/Filled1.pdf","F");
exec("pdftk cache/Filled1.pdf output cache/Filled1Flat.pdf flatten");
?>
下载原始Test.pdf文件:Test.pdf
下载Filled1。pdf文件(正确显示pdf表单,数据可见):Filled1。pdf
下载Filled1Flat。pdf文件(显示扁平的pdf表单,没有可见的表单数据):Filled 1Flat。pdf
有了Dhek PDF模板编辑器,就有了一个PHP代码片段,可以根据JSON映射(知道文本/复选框放在哪里)使用FPDF/FPDI将数据填充到现有的PDF中。https://github.com/applicius/dhek
我能够找到另一个过程来填写PDF表格,然后将其展平。我仍然不知道为什么要使用fpdf的“表单填充”脚本。组织不起作用。
我按照这里概述的步骤操作:
1) 如果字段名未知,则获取它们
exec("pdftk templates/Test.pdf dump_data_fields >cache/testfields.txt");
2) 使用字段名和字段值创建一个FDF文件,并将其另存为Test。fdf
%FDF-1.2
1 0 obj<</FDF<< /Fields[
<</T(Name)/V(John Doe)>>
<</T(Address)/V(123 White Lane)>>
<</T(Age)/V(30)>>
<</T(Phone)/V(123-1234)>>
] >> >>
endobj
trailer
<</Root 1 0 R>>
%%EOF
3)然后填写表格并压平
exec("pdftk templates/Test.pdf fill_form templates/Test.fdf output cache/FilledFDF.pdf flatten");
下载结果PDF(填充和展平):FilledPDF。pdf
公然自我推销:试试我的php pdftk软件包。如果您安装了pdftk
,它就非常容易使用。
composer require mikehaertl/php-pdftk
<?php
use mikehaertl/pdftk/Pdf;
$pdf = new Pdf('form.pdf');
// Fill in UTF-8 compliant form data!
$pdf->fillForm(array('name' => 'Any char: ÄÖÜ'))
->saveAs('filled.pdf');
// Alternatively: Send to browser for download...
$pdf->send('filled.pdf');
// ... or inline display
$pdf->send();
当我使用这个长字段名时,我没有得到任何错误,但是得到的PDF不包含我放在字段中的值。我想可能字段名有问题,所以我使用了Pdftk工具,它只给出了作为字段名。但是当我仅仅使用它时,我会得到error。救命?
http://www.russellyazbeck.com/aanasea http://www.russellyazbeck.com/aanasea/template.pdf 下面是PHP
谢谢,Ajay
我有一个基于XFA的pdf表单,我们需要使用java来填充它。你能建议最好的方法吗。我能够使用iText为pdf生成xfa xml。 我有从上面的代码生成的Pdf和Xfa XML。你能不能建议我如何继续下去,因为我似乎没有主意了。我试图检查XFA文档,但似乎不对。我没有xml,pdf非常复杂,因为它有许多字段,是一个动态XFA pdf表单。 您的帮助和建议将受到衷心的感谢。
您是否设法在横向模式下填充PDF文档? 谢谢你的帮助。
问题内容: 我正在使用DecimalFormat将双精度格式设置为2个小数位,如下所示: 它可以工作,但是如果我有一个像20这样的数字,它就给我这个: 我想要这个: 有什么建议? 问题答案: DecimalFormat类用于将十进制数字值转换为String。在您的示例中,您将使用来自format()方法的String并将其放回double变量中。如果然后输出该double变量,则不会看到格式化的字