是否可以仅使用 PHP 将 FDF 数据与 PDF 文件合并?还是别无选择,只能使用第 3 方命令行工具来实现这一目标?
如果是这样的话,有人可以指出我的方向吗?
我目前正在将 FDF 文件输出到浏览器,希望它将用户重定向到填写的 PDF,但对于某些人来说并非如此。FDF 内容正在输出到屏幕,即使我使用的是 header('Content-type: application/vnd.fdf');
以供将来参考,如果没有 3rd 方应用程序,似乎没有可靠的方法来做到这一点。Pdftk ( http://www.accesspdf.com/pdftk/ ) 最终成为我的解决方案。
我首先像以前一样生成了 FDF 文件,然后使用以下 PHP 代码将其合并到我的 PDF 文件中
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");
抱歉,如果这是基本的东西,只是想我会把它放在一个地方,这样人们就不会经历我忍受的头痛。
注意如果您的 PATH 变量未设置,您将需要使用 pdftk 的完整路径,即
passthru("/usr/local/bin/pdftk file.pdf fill_form data.fdf output - flatten");
今天还有另一种方法,不使用 passthru 或 pdftk,而只是 2004 年制作的脚本,但仍然运行良好: forge_fdf
它可以帮助您构建一个可以在您的 pdf 中直接合并的 fdf,这意味着您
将其保存在一个 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 文件(或者我记得有一种方法可以将其保存到磁盘),并且字段电子邮件将填充来自 MYSQL 的数据:mb_strtolower($row_delivreur['firstname']).'.'.mb_strtolower($row_delivreur['lastname']).'@gmail.com'
它适用于复选框、单选按钮……它在 Firefox 中打开良好,它必须与其他浏览器一起测试。
有关PDF HACKS的更多信息
到目前为止,我发现在 centos 上安装 pdftk 的最简单方法:
安装 rpmforge 存储库 - http://wiki.centos.org/AdditionalResources/Repositories/RPMForge#head-5aabf02717d5b6b12d47edbc5811404998926a1b
然后
百胜安装pdftk
就是这样!
http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/concatenate-fake/
这行得通,课程下载也从网站链接到,
它不需要 passthru/exec 命令,也不需要额外的扩展。
编辑说,这不适用于较新的 pdf 版本 1.5+,恢复为 PDFTK,繁琐但适用于使用“exec”命令的所有 pdf。