15

我正在使用来自 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 表单,没有可见的表单数据):Filled1Flat.pdf

4

3 回答 3

12

公然自我推销:试试我的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();
于 2014-07-11T21:27:24.260 回答
11

我能够找到另一个流程来填写 PDF 表单,然后将其展平。我仍然不知道为什么使用 fpdf.org 的“表单填写”脚本不起作用。

我按照此处概述的步骤操作:

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

于 2012-11-27T19:37:59.570 回答
0

使用 Dhek PDF 模板编辑器,有一个 PHP 片段可以根据 JSON 映射(知道将文本/复选框放在哪里)使用 FPDF/FPDI 将数据填充到现有 PDF 中。https://github.com/applicius/dhek

于 2013-10-20T16:34:22.903 回答