Php 使用FPDF填充PDF表单,然后使用PDFTK展平显示未填充的PDF

Php 使用FPDF填充PDF表单,然后使用PDFTK展平显示未填充的PDF,php,pdf,fpdf,pdftk,pdf-form,Php,Pdf,Fpdf,Pdftk,Pdf Form,我正在使用fpdf.org中的“表单填充”脚本填充我创建的PDF表单上的一些字段。这似乎工作正常 我希望生成的PDF表单被展平,以便用户无法编辑表单字段。我用这个。然而,当我尝试展平PDF时,我得到的是一个表单字段为空的PDF 任何关于如何使PDF扁平化(使用PHP)的建议都将不胜感激。谢谢 这是我的密码: <?php require('fpdm.php'); $fields = array("Name" => "John Doe", "Addres

我正在使用fpdf.org中的“表单填充”脚本填充我创建的PDF表单上的一些字段。这似乎工作正常

我希望生成的PDF表单被展平,以便用户无法编辑表单字段。我用这个。然而,当我尝试展平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文件:

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


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

我能够找到另一个流程来填充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

下载生成的PDF(填充并展平):

使用Dhek PDF模板编辑器,可以根据JSON映射(知道文本/复选框的放置位置)使用FPDF/FPDI将数据填充到现有的PDF中

明目张胆的自我推销:试试我的套餐。如果您安装了
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();
composer需要mikehaertl/php-pdftk

请同时提供中间文件Filled1.pdf。Test.pdf包含表单字段的空正常外观流。如果fpdf仅设置字段的值,但不更新其外观,并且如果pdftk假设现有外观是正确的,则可以解释观察到的行为。在这种情况下,必须更改表格填充以更新外观,或更改展开以创建外观。不过,我对PHP不感兴趣,因此不能说哪一个更容易实现,以及如何实现。mkl,感谢您的回复。我添加了下载中间版PDF(Filled1.PDF)和最终版PDF(Filled1Flat.PDF)的链接。如果我从PDFTK命令中删除“flatte”选项,PDF文件将正确显示表单数据:exec(“PDFTK cache/Filled1.PDF output cache/FilledProcessed.PDF”);在此下载:不幸的是,我直到现在还没有时间检查您提供的其他文件,现在它们似乎已经从您提供的链接中消失了。如果你重新激活链接,我将查看这些文件,并尝试告诉你哪些命令是罪魁祸首;因此,我推测fpdf既不会创建新外观,也不会将PDF标记为表单字段需要新外观。但是,由于中间文件在提供的链接中不可用,我无法验证这一推测。我与这个问题有完全相同的担忧,但考虑到我有utf-8字符,这个解决方案对我不起作用,这就是为什么我首先访问fpdf.org脚本的原因。要“勾选”FDF格式的复选框使用
/V/Yes
,但是,当我使用此方法时,所有未勾选的复选框(复选框本身)都被完全删除。您好西里尔文符号是什么?@devzorg请检查文档。他们得到了部分支持。但是pdftk有一些问题。@MichaelHärtl-很好的软件包,非常容易使用!强烈推荐。@MichaelHärtl嘿!在这个资源中,无论如何你可以帮我诊断一个问题:@JayDadhania你可以像其他表单字段一样填写复选框。必须将复选框(在PDF中预定义)的字段名和选项值作为值传递。请尝试
pdftk file.pdf dump_data_字段
,并在相应字段上查找
FieldStateOption
,以找出可用值。
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();