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

时间:2016-05-03 13:22:36

标签: php pdf checkbox

我试图通过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"," yourtype#2"等等。但是脚本没有&似乎能够找到任何这个名字。我也试过像#34; yourtype [1]"没有运气。一旦我可以访问它们,我是否必须为其中一个设置值,还是直接指定(整数?)值?
  3. 我的例子:

    <?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..)

3 个答案:

答案 0 :(得分:2)

好的,我遇到了这个问题,并一直在尝试使用FPDM来解决这个问题。复选框字段在Adobe Acrobat上具有“导出”值,默认情况下该值为“是”&#39;但它可以是另一个值,取决于语言或由用户手动更改。 如果在FPDM上分配了该值,则在下载并在Adobe的pdf阅读器中查看时,它将正确标记该复选框。但是,网络浏览者似乎存在问题。 Firefox将在复选框内显示叠加为字符串的文本,而chrome根本无法显示任何检查。这可能是我的问题,但由于我只需要pdf阅读器支持,我没有做进一步的研究。

答案 1 :(得分:1)

如你所述,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');

答案 2 :(得分:0)

对于预填充pdf,我使用了https://www.sitepoint.com/filling-pdf-forms-pdftk-php/此链接。

我们可以按照以下步骤操作: 1.安装pdftk工具包和pdftk服务器。 2.使用cmd中的以下命令将pdf转换为pdftk pdf: pdftk your.pdf输出coverted.pdf (在脚本中使用转换后的pdf) 3.按照 - https://www.sitepoint.com/filling-pdf-forms-pdftk-php/中提到的步骤进行操作 4.现在使用以下命令: pdftk sample.pdf dump_data_fields输出fields.txt (使用以下各种选项生成的文本文件)

FieldType:按钮 FieldName:topmostSubform [0] .Page5 [0] .Gender [0] FieldNameAlt:8。性别。男 FieldFlags:0 fieldValue方法: FieldJustification:左 FieldStateOption:关闭

FieldStateOption:男性

FieldType:按钮 FieldName:topmostSubform [0] .Page5 [0] .Gender [1] FieldNameAlt:女 FieldFlags:0 fieldValue方法: FieldJustification:左 FieldStateOption:女性

FieldStateOption:关闭

5.)在php中,我们可以这样工作: require_once(dirname( 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中的值预先填充。

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