当前位置: 首页 > 知识库问答 >
问题:

PDF字段在使用PHP填充后不显示在Reader中,而是显示在pdftk dump_data_fields中

冯新知
2023-03-14

http://www.russellyazbeck.com/aanasea

http://www.russellyazbeck.com/aanasea/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();

?>

共有1个答案

唐焕
2023-03-14

原始PDF中有一个问题,在某些情况下,使Acrobat Reader忽略字段inventory0。清单9。

字段inventory0...inventory9用对象146的父条目定义,对象146的父条目又定义为

146 0 obj 
<<
/Kids [81 0 R 117 0 R]
>> 

一个明显的错误是,并不是所有提到该字段为父字段的字段都被枚举为子字段。

通过覆盖inventory0字段的父项修补结果PDF。带有空格字符的inventory9会生成PDF格式,在PDF格式中Acrobat Reader也很乐意显示这些字段。

因此,我建议删除那个虚假的父母。

 类似资料:
  • 问题内容: 开发需要显示pdf 的桌面应用程序。我了解到(当前版本)不支持pdf查看/显示,我也了解到。 现在,问题: 是否有任何外部组件或库可以在JavaFX中查看pdf?它应该是一个免费软件。 (如果必须使用)如何将其嵌入到我的应用程序中。 问题答案: JPedalFX示例代码和用法 JPedalFX下载提供了有关使用JPedalFX的示例代码。 我有点of脚,但是我只是在这里粘贴从JPeda

  • 问题内容: 我正在关注此软件包https://www.npmjs.com/package/react- pdf 我从后端获取了整个原始pdf数据,因此我尝试使用以下代码。 但是它显示“无法加载PDF文件”。我不想在本地保存任何文件。最好的方法是显示pdf以及后端提供的原始数据。 在终端中,它记录了错误: 问题答案: 好像您是将PDF数据作为prop 的值直接传递给组件一样。但是根据文档,您需要使用

  • 我已经写了一个jsp页面来显示pdf的内容,但是最终在jsp中使用了ascii代码。我想在jsp中显示pdf的内容。我错过了什么部分。当我试图在pdf中写入读取的内容时,它只显示ascii值,而不是可读的格式

  • 我使用的是fpdf的“表格填写”脚本。org来填充我创建的PDF表单上的一些字段。这似乎工作正常。 我希望生成的PDF表单被展平,以便用户无法编辑表单字段。为此我使用PDFTK。但是,当我尝试展平PDF时,我得到一个表单字段为空的PDF。 关于如何使PDF扁平化(使用PHP)的任何建议都将不胜感激。谢谢! 这是我的代码: 下载原始Test.pdf文件:Test.pdf 下载Filled1。pdf文

  • 问题内容: 我正在使用DecimalFormat将双精度格式设置为2个小数位,如下所示: 它可以工作,但是如果我有一个像20这样的数字,它就给我这个: 我想要这个: 有什么建议? 问题答案: DecimalFormat类用于将十进制数字值转换为String。在您的示例中,您将使用来自format()方法的String并将其放回double变量中。如果然后输出该double变量,则不会看到格式化的字