我正试图通过FPDM填写PDF表单,如本例所示:http://www.fpdf.org/en/script/script93.php
填写文本、日期、小数。。。输入工作正常,但我不知道如何检查复选框和分组复选框(单选按钮)。这是两个问题:
- 复选框有一个常规名称,如"mycheck1"。将PHP数组中的值设置为
true
或"true"
或"1"
或1
或"checked"
或"on"
或"yes"
不会激活复选框(也会进行区分大小写的测试)。我必须设置哪个值才能激活复选框 - 分组复选框(单选按钮)甚至找不到——脚本抛出错误
"FPDF-Merge Error: field yourtype not found"
。正确的名字是什么?Adobe Acrobat Pro DC显示名称"yourtype"作为组中所有复选框的名称。在字段列表中,它将分组复选框显示为"yourtype#0"、"yourtype#1"、"ourtype#2"等。但脚本似乎找不到这些名称中的任何一个。我也尝试过类似"你的类型[1]"的东西,但运气不好。一旦我可以访问它们,我是必须为其中一个设置值,还是直接分配(integer?)值
我的例子:
<?php
require('fpdm.php');
$fields = array(
'forname' => 'Jon Dow', // text input: works
'mycheck1' => true, // checkbox: doesn't work! Also tried "true", 1, "1", "yes", "on", ... (with case-sensitive)
'yourtype' => true, // grouped checkbox (radio button): doesn't even find input with that name.
);
$pdf = new FPDM('template.pdf');
$pdf->Load($fields, true);
$pdf->Merge();
$pdf->Output();
?>
编辑:FPDM类似乎不支持设置某些类型,如复选框和下拉列表。在文件fpdm.php
中,ToDo部分的标头中显示以下内容:extends filling to another form fields types (checkboxes,combos..)
正如您所提到的,fpdm中不支持它。我正在寻找另一个允许这样做的库,我发现了这个:php-pdftk
代码示例:
// Fill form with data array
$pdf = new Pdf('doc.pdf');
$pdf->fillForm([
'CheckBox1' =>'Yes',
'RadioButton'=>'Choice1',
'name'=>'Wizard'
])
->needAppearances()
->saveAs('doc_filled.pdf');
好的,我遇到了这个问题,一直在尝试使用FPDM来解决它。复选框字段在Adobe Acrobat上有一个"导出"值,默认情况下该值为"是",但根据语言或用户手动更改的情况,它可以是另一个值。如果该值随后在FPDM上分配,则在下载并在Adobe的pdf阅读器中查看时,它将正确标记复选框。然而,网络观众似乎存在问题。Firefox将在复选框内以字符串的形式显示覆盖的文本,而chrome根本无法显示任何复选框。这对我来说可能是个问题,但由于我只需要pdf阅读器的支持,我没有做进一步的研究。
对于预填充,我使用了pdfhttps://www.sitepoint.com/filling-pdf-forms-pdftk-php/这个链接。
我们可以遵循以下步骤:1.安装pdftk工具箱和pdftk服务器。2.使用cmd中的以下命令将您的pdf转换为pdftk pdf:pdftk your.pdf输出覆盖.pdf(在脚本中使用转换后的pdf)3.按照下列步骤进行操作:https://www.sitepoint.com/filling-pdf-forms-pdftk-php/4.现在使用以下命令:pdftk sample.pdf dump_data_fields output fields.txt(使用以下各种选项生成的文本文件)
字段类型:按钮字段名称:topmastSubform[0]。Page5[0]。性别[0]字段名称Alt:8。性别男性的字段标志:0字段值:字段对齐:左FieldStateOption:关闭
FieldStateOption:男性
字段类型:按钮字段名称:topmastSubform[0]。Page5[0]。性别[1]字段名称Alt:女性字段标志:0字段值:字段对齐:左FieldStateOption:女性
FieldStateOption:关闭
5.)在php中,我们可以像这样工作:require_one(目录名(FILE).'/../..//vendor/fpdm/PdfForm.php’);
$male = $female = '';
if ($customer_data['gender'] == 'male') {
$male = 'male';
$female = 'Off';
} else {
$male = 'Off';
$female = 'Female';
}
$field_data = array(
'topmostSubform[0].Page5[0].Gender[0]' => $male,
'topmostSubform[0].Page5[0].Gender[1]' => $female,
);
$pdf = new 'PdfForm(dirname(__FILE__) . '/../../../vendor/fpdm/ssn_form.pdf', $field_data);
// $pdf->save('outputs/form-filled.pdf');
$pdf->save('outputs/form-filled.pdf');
//$pdf->download();
$file = dirname(__FILE__) . '/../../../outputs/form-filled.pdf';
$filename = 'form-filled.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
@readfile($file);
exit;
6.)通过使用txt文件中FieldStateOption中的值预先填充复选框。
谢谢,我希望这会有所帮助。