Слияние данных FDF в PDF-файл с помощью PHP

можно ли объединить данные FDF с PDF-файлом, используя только PHP? Или нет другого варианта, кроме как использовать сторонний инструмент командной строки для достижения этого?

Если это так может кто-нибудь точка меня в сторону?

в настоящее время я выводю файл FDF в браузер в надежде, что он перенаправит пользователя на заполненный PDF, но для некоторых людей это не так. Содержимое FDF выводится на экран, хотя я использую заголовок ('Content-type: application / vnd.fdf');

4 ответов


для дальнейшего использования, похоже, что нет надежного способа сделать это без стороннего приложения. Pdftk (http://www.accesspdf.com/pdftk/) оказался моим решением.

Я сначала сгенерировал файл FDF, как и раньше, а затем объединил его в свой PDF-файл, используя следующий PHP-код

header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="Download.pdf"');
passthru("pdftk file.pdf fill_form data.fdf output - ");
exit;

Это было намного проще, чем я думал. Это мгновенно устраняет необходимость взломать заголовки и расширения файлов, чтобы обеспечить все браузеры обрабатывают FDF правильно, так как он просто заставляет браузер загружать файл PDF.

Если вы хотите, чтобы выходной файл PDF не редактируется, используйте

    passthru("pdftk file.pdf fill_form data.fdf output - flatten");

извинения, если это основные вещи, просто подумал, что я положил все это в одном месте, чтобы люди не прошли через головную боль, которую я пережил.

N. B. Если ваша переменная PATH не установлена, вам нужно будет использовать полный путь к pdftk, т. е.

    passthru("/usr/local/bin/pdftk file.pdf fill_form data.fdf output - flatten");

есть еще один способ, который не использует passthru или pdftk, а просто скрипт, сделанный в 2004 году, но все еще работает хорошо:forge_fdf

это поможет вам построить fdf, что вы можете incoporate прямо в вашем pdf, это означает, что вы

сохраните это в файле php, скажем generatePdf.в PHP

require_once('forge_fdf.php');  

// leave this blank if we're associating the FDF w/ the PDF via URL
$pdf_form_url= "";


// default data; these two arrays must ultimately list all of the fields
// you desire to alter, even if you just want to set the 'hidden' flag;
//
//
$fdf_data_names= array(); // none of these in this example
$fdf_data_strings= array(); // none of these in this example

$fdf_data_strings['email']=mb_strtolower($row_delivreur['firstname']).'.'.mb_strtolower($row_delivreur['lastname']).'@gmail.com';

$fields_hidden= array();
$fields_readonly= array();

// set this to retry the previous state
$retry_b= false;

header( 'content-type: application/vnd.fdf' );

echo forge_fdf( $pdf_form_url,
        $fdf_data_strings, 
        $fdf_data_names,
        $fields_hidden,
        $fields_readonly );

создание ссылки на Pathtoyourpdf / nameofpdffile.pdf#FDF=generatePdf.php откроет ваш PDF-файл в браузере (в качестве альтернативы есть способ сохраните его на диск, я думаю, я помню), и поле email будет заполнено данными из MYSQL:mb_strtolower($row_delivreur['firstname']).'.'.mb_strtolower($row_delivreur['lastname']).'@gmail.com'

он работает с флажками, переключателем,... Он хорошо открывается в firefox, он должен быть протестирован с другими браузерами.

больше информации на PDF HACKS


на сегодняшний день самый простой способ, который я нашел для установки pdftk на centos:

установить rpmforge repo - http://wiki.centos.org/AdditionalResources/Repositories/RPMForge#head-5aabf02717d5b6b12d47edbc5811404998926a1b

затем

yum установить pdftk

и вот оно!


http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/concatenate-fake/

это работает, классы загрузки связаны с веб-сайта тоже,

Он не требует команды passthru / exec и никаких дополнительных расширений.

отредактировано, чтобы сказать, что это не работает с более новыми версиями pdf 1.5+, возвращенными в PDFTK, но работает со всеми PDF-файлами с помощью команды "exec".