使用PDF格式的FPDM设置复选框和单选按钮


Setting checkboxes and radiobuttons with FPDM in PDF form

我正试图通过FPDM填写PDF表单,如本例所示:http://www.fpdf.org/en/script/script93.php

填写文本、日期、小数。。。输入工作正常,但我不知道如何检查复选框和分组复选框(单选按钮)。这是两个问题:

  1. 复选框有一个常规名称,如"mycheck1"。将PHP数组中的值设置为true"true""1"1"checked""on""yes"不会激活复选框(也会进行区分大小写的测试)。我必须设置哪个值才能激活复选框
  2. 分组复选框(单选按钮)甚至找不到——脚本抛出错误"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中的值预先填充复选框。

谢谢,我希望这会有所帮助。