Поля PDF не отображаются в Reader, но отображаются в pdftk dump_data_fields после заполнения PHP
http://www.russellyazbeck.com/aanasea
После заполнения формы и загрузки PDF она открывается в окне браузера и все поля заполняются правильно. Затем щелкните правой кнопкой мыши и сохраните как, а затем откройте PDF-файл в Adobe Reader. Все поля инвентаря исчезли. Даже если я зайду в Инструменты> Поля> Редактировать поля, поля инвентаря не существуют.
Однако, если я запускаю 'pdftk doc.pdf dump_data_fields' в том же самом файле PDF, я вижу, что поля инвентаризации действительно существуют с соответствующими значениями.
Почему автономный читатель не видит эти поля?
Я создал этот PDF-файл в Adobe Acrobat, экспортировал файл field.fdf, объединил их с помощью pdftk, а затем вывел файл template.pdf с помощью pdftk.
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 ответ
В исходном PDF-файле есть проблема, из-за которой Acrobat Reader игнорирует поля инвентаризация0 .. инвентаризация9.
Поля инвентарь0 .. инвентарь9 определяются родительской записью для объекта 146 0, которая, в свою очередь, определяется как
146 0 obj
<<
/Kids [81 0 R 117 0 R]
>>
Очевидная ошибка заключается в том, что не все поля, в которых упоминается поле " Родитель", перечислены здесь как " Дети".
Если в такой ситуации NeedAppearances есть false
, Acrobat Reader по-прежнему счастлив, но если это так true
Acrobat Reader не отображает эти поля. К сожалению, при заполнении полей FPDM устанавливает этот флаг на true
,
Извлечение PDF-файла результата путем перезаписи родительских записей полей инвентаризация0 .. инвентаризация9 пробелами приводит к получению PDF-файла, в котором Acrobat Reader снова с удовольствием отображает эти поля.
Таким образом, я предлагаю удалить этого поддельного родителя.