Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PDF字段不';使用PHP填充后,不会在Reader中显示,但会在pdftk dump_data_字段中显示_Php_Pdf_Populate_Pdftk - Fatal编程技术网

PDF字段不';使用PHP填充后,不会在Reader中显示,但会在pdftk dump_data_字段中显示

PDF字段不';使用PHP填充后,不会在Reader中显示,但会在pdftk dump_data_字段中显示,php,pdf,populate,pdftk,Php,Pdf,Populate,Pdftk,填写表单并下载PDF后,它将在浏览器窗口中打开,并且所有字段都已正确填充。然后我右键单击并另存为,然后在Adobe Reader中打开PDF。所有库存字段都已消失。即使我进入工具>字段>编辑字段,库存字段也不存在 但是,如果我在同一个pdf上运行“pdftk doc.pdf dump_data_fields”,我可以看到库存字段实际上与相应的值一起存在 为什么独立读者看不到这些字段 我在AdobeAcrobat中创建了这个PDF,导出field.fdf文件,使用pdftk合并它们,然后使用pdf

填写表单并下载PDF后,它将在浏览器窗口中打开,并且所有字段都已正确填充。然后我右键单击并另存为,然后在Adobe Reader中打开PDF。所有库存字段都已消失。即使我进入工具>字段>编辑字段,库存字段也不存在

但是,如果我在同一个pdf上运行“pdftk doc.pdf dump_data_fields”,我可以看到库存字段实际上与相应的值一起存在

为什么独立读者看不到这些字段

我在AdobeAcrobat中创建了这个PDF,导出field.fdf文件,使用pdftk合并它们,然后使用pdftk输出template.PDF

这里是PHP

<?php

    require('fpdm.php');
    $today = date("F j, Y"); 

    $fields = array(
        'todaysDate'     => $today,
        'invoiceNumber' => $_POST["invoice_number"],
        'customerName'  => $_POST["customer_name"],
        'customerName2'  => $_POST["customer_name"],
        'address'        => $_POST["address"],
        'cityStateZip' => $_POST["city"] . ', ' . $_POST["state"] . ' ' . $_POST["zip"],
        'phoneNumber'   => $_POST["phone_number"],
        'email'          => $_POST["email"], 
        'rentalDates'   => $_POST["date_from"] . " - " . $_POST["date_to"],
    );

    $inventory = array (
        $_POST["inventory0"],
        $_POST["inventory1"],
        $_POST["inventory2"],
        $_POST["inventory3"],
        $_POST["inventory4"],
        $_POST["inventory5"],
        $_POST["inventory6"],
        $_POST["inventory7"],
        $_POST["inventory8"],
        $_POST["inventory9"],
        $_POST["inventory10"],
        $_POST["inventory11"],
        $_POST["inventory12"],
        $_POST["inventory13"],
        $_POST["inventory14"],
        $_POST["inventory15"],
        $_POST["inventory16"],
        $_POST["inventory17"],
        $_POST["inventory18"],
    );

    $unit = array (
        $_POST["unit0"],
        $_POST["unit1"],
        $_POST["unit2"],
        $_POST["unit3"],
        $_POST["unit4"],
        $_POST["unit5"],
        $_POST["unit6"],
        $_POST["unit7"],
        $_POST["unit8"],
        $_POST["unit9"],
        $_POST["unit10"],
        $_POST["unit11"],
        $_POST["unit12"],
        $_POST["unit13"],
        $_POST["unit14"],
        $_POST["unit15"],
        $_POST["unit16"],
        $_POST["unit17"],
        $_POST["unit18"],
    );

    $price = array (
        $_POST["price0"],
        $_POST["price1"],
        $_POST["price2"],
        $_POST["price3"],
        $_POST["price4"],
        $_POST["price5"],
        $_POST["price6"],
        $_POST["price7"],
        $_POST["price8"],
        $_POST["price9"],
        $_POST["price10"],
        $_POST["price11"],
        $_POST["price12"],
        $_POST["price13"],
        $_POST["price14"],
        $_POST["price15"],
        $_POST["price16"],
        $_POST["price17"],
        $_POST["price18"],
    );

    $subtotal = 0;

    for ($i=0, $z=count($inventory); $i<=$z; $i++) {
        $subtotal = $subtotal + ($unit[$i] * $price[$i]);
    }

    $subtotal = $subtotal;
    $deposit = $subtotal * ($_POST["deposit"] / 100);
    $tax = $subtotal * ($_POST["tax"] / 100);
    $deductions = $_POST["deductions"]; 
    $balanceDue = $subtotal + $tax - $deductions;
    $allTotal = $subtotal + $tax;
    $c = 0;

    for ($i=0, $z=count($inventory); $i<=$z; $i++) {
        if ($inventory[$i] !== NULL) {
            $fields[inventory . $c] = $inventory[$i];
            $fields[unit . $c] = $unit[$i];
            $fields[price . $c] = "$" . money_format('%i', $price[$i]);
            $fields[total . $c] = "$" . money_format('%i', ($unit[$i] * $price[$i]));
            $c++;
        }
    };
    $fields[subtotal] = "$" . money_format('%i', $subtotal);            
    $fields[deposit] = "$" . money_format('%i', $deposit);
    $fields[tax] = "$" . money_format('%i', $tax);
    $fields[deductions] = "$" . money_format('%i', $deductions);
    $fields[balanceDue] = "$" . money_format('%i', $balanceDue);
    $fields[allTotal] = "$" . money_format('%i', $allTotal);

    $pdf = new FPDM('template.pdf');
    $pdf->Load($fields, true); // second parameter: false if field values are in ISO-8859-1, true if UTF-8
    $pdf->Merge();
    $pdf->Output();

?>

原始PDF中存在一个问题,在某些情况下会使Acrobat Reader忽略字段清单0。。目录9

字段清单0。。清单9是用对象146 0父项定义的,而该父项又被定义为

146 0 obj 
<<
/Kids [81 0 R 117 0 R]
>> 
146 0 obj
> 
一个明显的错误是,并不是所有提到该字段为父项的字段都在这里被枚举为子项

如果在这种情况下,needAppearancess
false
,Acrobat Reader仍然很高兴,但如果为
true
Acrobat Reader则拒绝显示这些字段。不幸的是,在填充字段时,FPDM将该标志设置为
true

通过覆盖字段inventory0的父项来修补结果PDF。。带有空格字符的inventory9将生成PDF,Acrobat Reader同样乐于显示这些字段


因此,我建议删除虚假的父项

,不幸的是,您的pdf链接返回404错误。不过,我假设它的形式是xfa和AcroForm的混合形式。您的代码、浏览器和pdftk只查看/操作AcroForm部件,但Adobe Reader显示xfa信息。修复了pdf链接。我来看看你提到的那些东西。谢谢。我看了pdf。它不包含一个混合形式狭窄,因为我认为。因此,您也可以提供一个pdf格式的文件。您可以在我提供的第一个链接下载一个填充的pdf。好的,一种方法是在十六进制编辑器中编辑您的原始pdf,用空格覆盖
/Parent 146 0 R
inventory0..inventory9
的表单字段字典中的条目。但是,您必须小心操作,这些条目需要被覆盖,而不是删除,因为这会改变对象位置,需要您在PDF中重建交叉引用。我不知道是否有任何标准的PDF工具允许这种改变。顺便说一句:AdobeAcrobatPreflight还警告页面内容不是100%正常。您可能希望从头开始重新创建PDF,而不会出现此类问题。