我有在SAP中生成的PDF表格。该表格大约有30个字段。有些已经装满了。而其他人将由员工填补。这是该表格的示例。
现在,我将创建一个php应用程序,该应用程序可以接受来自用户的数据并填写以上表格并生成该PDF文件。我阅读了PDFtk Server Utility填写PDF表单的教程。因此,我在Windows 7中下载并安装了该工具。在创建PHP应用程序之前,我认为我必须尝试在PC上手动填写表格。因此,首先,我使用以下命令转储数据字段并尝试填充一个变量。
pdftk sample.pdf dump_data_fields > fields_names.txt
输出:
.
.
FieldType: Text
FieldName: data[0].#pageSet[0].TimeSheet[0].CURRENTWEEK[0]
FieldNameAlt: Week
FieldFlags: 0
FieldValueDefault: 26
FieldJustification: Left
FieldMaxLength: 2
---
FieldType: Text
FieldName: data[0].#pageSet[0].TimeSheet[0].CURRENTYEAR[0]
FieldNameAlt: Year
FieldFlags: 0
FieldValueDefault: 2018
FieldJustification: Left
FieldMaxLength: 4
.
.
然后我创建FDF文件以填充CURRENTWEEK变量。
%FDF-1.2
%âãÏÓ
1 0 obj
<<
/FDF
<<
/Fields [
<</T(data[0].#pageSet[0].TimeSheet[0].CURRENTWEEK[0])/V(80)>>
]
>>
>>
endobj
trailer
<<
/Root 1 0 R
>>
%%EOF
我运行此命令以生成填充表格
pdftk sample.pdf fill_form data.fdf output output.pdf
PDF表格未填写。仍显示原始PDF表单。 当我转储新创建的表单的字段时,它再次显示。
---
FieldType: Text
FieldName: data[0].#pageSet[0].TimeSheet[0].CURRENTWEEK[0]
FieldNameAlt: Week
FieldFlags: 0
FieldValue: 80
FieldValueDefault: 26
FieldJustification: Left
FieldMaxLength: 2
---
FieldValue:80
被添加,但是表格中没有数据。在字段中显示相同的26值。
创建FDF或运行命令时是否有任何错误?
答案 0 :(得分:0)
我认为这是fdf文件格式的问题,因此首先使用以下文件更新fdf文件:
{{ @action($controller.'@show', ['id' => $id])}}
更新fdf文件后,在终端中运行以下命令:
%FDF-1.2
1 0 obj<</FDF<< /Fields[
<</T(data[0].#pageSet[0].TimeSheet[0].CURRENTWEEK[0])/V(80)>>
] >> >>
endobj
trailer
<</Root 1 0 R>>
%%EOF
注意:正确检查所有文件的路径
希望它能对您有所帮助。
答案 1 :(得分:0)
PDF中的表格技术有两种。
timeSheet.currentweek
。data[0].#pageSet[0].TimeSheet[0].CURRENTWEEK[0]
有时,PDF包含两种技术。这通常称为混合形式。
根据您在问题中分享的信息,我认为您的表单是混合表单。表单中包含XFA流,同时,这些字段是使用PDF定义的句法。填写时,您需要确保更新AcroForm表单字段以及 XFA表单的XML。
pdfTk是iText的翻版,该iText使用a version of iText that should no longer be used编译为GCJ可执行文件。由于我是iText的原始开发人员,因此在一些pdfTk错误消息中,您可能会注意到我的姓氏。 pdfTk使用的iText版本早于iText中的XFA支持,因此pdfTk无法正确填写表单是正常的。
答案 2 :(得分:0)
首先,您已经在服务器上安装了pdftk,然后运行以下命令
pdftk path/to/the/form.pdf dump_data_fields > field_names.txt
您会得到pdf文件的txt文件,其输出如下所示
FieldType: Text
FieldName: data[0].#pageSet[0].TimeSheet[0].KUNNR[0]
FieldNameAlt: User
FieldFlags: 1
FieldValueDefault: 65604
FieldJustification: Left
FieldMaxLength: 10
FieldJustification: Left
---
然后您使用以下软件包
composer require mikehaertl/php-pdftk
然后更新作曲家
use mikehaertl\pdftk\Pdf;
// Fill form with data array
$pdf = new Pdf('path of your pdf');
$pdf->fillForm([
'data[0].#pageSet[0].TimeSheet[0].KUNNR[0]'=>'sanjay',
])
->needAppearances()
->saveAs('filled.pdf');
这对我有用。