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