我在SAP中生成了PDF表单。这种形式的字段大约有30个。有些已经满了。而其他人则由员工来代替。这是那份表格的样品。
现在,我将创建一个php应用程序,它可以接受用户的数据并填写上面的表单并生成PDF文件。我阅读了由PDFtk服务器实用程序填写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或运行命令时是否出错?
发布于 2018-06-28 06:26:49
首先在服务器上安装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');
这是我的工作。
发布于 2018-06-26 11:38:44
我认为这是fdf文件格式的问题,所以首先用以下文件更新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
更新fdf文件后,在终端中运行以下命令:
pdftk sample.pdf fill_form data.fdf output output.pdf
备注:正确检查所有文件的路径
我希望它能帮到你。
发布于 2018-06-26 16:01:18
PDF中有两种表单技术。
timeSheet.currentweek
。data[0].#pageSet[0].TimeSheet[0].CURRENTWEEK[0]
有时,PDF包含这两种技术。这通常被称为混合形式。
根据您在问题中共享的信息,我假设您的表单是一个混合表单。表单内部有一个XFA流,同时使用PDF语法定义字段。在填写它时,需要确保更新AcroForm表单字段以及XFA表单的。
为什么pdfTk不能正确地做到这一点呢?
pdfTk是iText的翻版,它使用编译成可用GCJ执行的不应该再使用的iText版本。您可能会在一些pdfTk错误消息中注意到我的姓氏,因为我是iText的原始开发人员。pdfTk使用的pdfTk版本早于iText中的XFA支持,因此pdfTk无法正确填写表单是正常的。
如何解决这个问题?
https://stackoverflow.com/questions/51034436
复制相似问题