я пытаюсь заполнить форму PDF с помощью PHP.
Я перепробовал множество способов и обнаружил, что FPDM (FPDF) работает хорошо, когда я создаю новую форму или использую форму из предоставленного исходного файла.
Моя проблема заключается в том, что когда я использую уже созданную форму PDF, форма имеет ограничения, такие как пароль владельца, документ подписан и сертифицирован. Я использовал приложение, чтобы снять эти ограничения, некоторые из них остались. На картинке ниже вы можете увидеть, как выглядит мой текущий PDF.
Этот PDF-файл также был сжат, и поскольку FPDM выдавал ошибку, что «Object Stream» не поддерживается, я распаковал его с помощью PDFTK, поэтому размер файла увеличился с 1,48 МБ до 6,78 МБ.
Чтобы получить все имена полей формы, я также использовал PDFTK, поэтому они у меня есть в текстовом файле.
По инструкции FPDM я могу сделать это двумя способами:
Первый способ - отправить массив field_name => value вместе с PDF, который я хочу изменить, и все. Поэтому, когда я использую PDF, описанный выше, я получаю сообщение об ошибке:
«Ошибка слияния FPDF: поле form1[0].#subform[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, я получаю сообщение
'Файл, который вы пытаетесь открыть, содержит комментарии или данные формы, которые должны быть помещены в файл test.pdf. Этот документ не может быть найден. Возможно, он был перемещен или удален. Вы хотите просмотреть, чтобы попытаться найти этот документ?»
но файл есть, не перемещен и не удален. Когда я нахожу его вручную, форма заполняется.
Если у кого-то есть опыт в этом, любая помощь или совет очень помогут.
Заранее спасибо, Вукасин
РЕДАКТИРОВАТЬ: больше информации о файле PDF