PDF填写FPDF表格然后使用PDFTK拼合显示未填写的PDF

use*_*093 9 php pdf fpdf pdf-form pdftk

我正在使用fpdf.org中的"Form Filling"脚本填写我创建的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");
?>
Run Code Online (Sandbox Code Playgroud)

下载原始的Test.pdf文件:Test.pdf

下载Filled1.pdf文件(正确显示pdf表格,数据可见):Filled1.pdf

下载Filled1Flat.pdf文件(显示展平的pdf表格,没有可见的表格数据):Filled1Flat.pdf

Mic*_*rtl 8

公然的自我推销:尝试我的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();
Run Code Online (Sandbox Code Playgroud)


use*_*093 7

我能够找到另一个进程来填充PDF表单然后将其展平.我仍然不知道为什么使用fpdf.org中的"Form Filling"脚本不起作用.

我按照这里列出的步骤:

1)获取字段名称(如果尚未知道)

exec("pdftk templates/Test.pdf dump_data_fields >cache/testfields.txt");
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

3)然后填写表格并压平

exec("pdftk templates/Test.pdf fill_form templates/Test.fdf output cache/FilledFDF.pdf flatten");
Run Code Online (Sandbox Code Playgroud)

下载生成的PDF(填充和展平):FilledPDF.pdf