То, что я пытаюсь выполнить, - это заполнение формы PDF с помощью PHP.
Я пробовал много способов, я обнаружил, что FPDM (FPDF) работает хорошо, когда я создаю новую форму, или использую форму из исходного файла, который они предоставили.
Моя проблема в том, что я использую уже созданную форму PDF, форма имеет такие ограничения, как пароль владельца, документ подписан и сертифицирован. Я использовал приложение, чтобы удалить эти ограничения, некоторые из них остались. На рисунке ниже вы можете увидеть, как выглядит мой текущий PDF-документ.Жилье в формате PDF с FPDM
Это PDF также был сжат, и потому FPDM бросает ошибку, что «объект потока» не поддерживается Я распакованы через Pdftk, поэтому файл изменился с 1,48 Мб до 6,78 Мб.
Чтобы получить все имена полей формы, я использовал также PDFTK, поэтому у меня есть их в txt-файле.
Есть два способа я могу сделать по поручению FPDM:
Первый способ только для отправки массива поле_формов => значения наряду с PDF Я хочу изменить, и это все. Поэтому, когда я использую PDF описано выше, я получаю ошибку:
'FPDF-Merge. Ошибка: поле form1 [0] # подчиненной [0] .Line1_GivenName [0] не найден'
Напомним, что у меня есть все имена и это имя существует.
<?php
require('fpdm.php');
$fields = array(
'form1[0].#subform[0].Line1_GivenName[0]' => 'my name'
);
$pdf = new FPDM('test.pdf');
$pdf->Load($fields, false); // second parameter: false if field values are in ISO-8859- 1, true if UTF-8
$pdf->Merge();
$pdf->Output('new_pdf.pdf', 'F');
?>
Другой способ заключается в том, что я создаю FDF файл с функцией createXFDF, а затем использовать FPDM слиться FDF в формате PDF. Это решение создает «new_file.pdf», как я хочу, но пустой :)
function createXFDF($file, $info, $enc = 'UTF-8') {
$data = '<?xml version="1.0" encoding="'.$enc.'"?>' . "\n" .
'<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">' . "\n" .
'<fields>' . "\n";
foreach($info as $field => $val) {
$data .= '<field name="' . $field . '">' . "\n";
if(is_array($val)) {
foreach($val as $opt)
$data .= '<value>' .
htmlentities($opt, ENT_COMPAT, $enc) .
'</value>' . "\n";
} else {
$data .= '<value>' .
htmlentities($val, ENT_COMPAT, $enc) .
'</value>' . "\n";
}
$data .= '</field>' . "\n";
}
$data .= '</fields>' . "\n" .
'<ids original="' . md5($file) . '" modified="' .
time() . '" />' . "\n" .
'<f href="' . $file . '" />' . "\n" .
'</xfdf>' . "\n";
return $data;
}
require('fpdm.php');
$pdf = new FPDM('test.pdf', 'posted-0.fdf');
$pdf->Merge();
$pdf->Output('new_file.pdf', 'F');
Еще одна вещь, если я пытаюсь открыть файл FDF в Acrobat я получаю сообщение
«Файл, который вы пытаетесь open содержит комментарии или данные формы, которые должны быть помещены в test.pdf. Этот документ не найден. Возможно, это было перемещено или удалено. Хотели бы вы попытаться найти этот документ?
но файл отсутствует, не перемещается и не удаляется. Когда я нахожу его вручную, эта форма заполняется.
Если у кого-то есть опыт с этим, любая помощь или совет помогут много.
Спасибо заранее, Vukašin
EDIT: Более подробную информацию о файле PDF
Этот существующий PDF, каковы записи для PDF-продюсера и программного обеспечения для создания документов? (можно найти на вкладке «Описание» свойств документа). –
Что происходит, когда вы вводите абсолютный путь целевого PDF-файла в XFDF? Что происходит, когда вы следуете рекомендациям Acrobat и находите целевой PDF-файл при открытии XFDF? Что происходит, когда вы активно импортируете XFDF в уже открытый целевой PDF? –
Макс Wyss благодарит вас за ответ. Взгляните на мое редактирование вопроса. Thx – Wolf87