【发布时间】:2010-11-26 06:33:44
【问题描述】:
是否可以仅使用 PHP 将 FDF 数据与 PDF 文件合并?还是别无选择,只能使用 3rd 方命令行工具来实现这一点?
如果是这样的话,有人可以指出我的方向吗?
我目前正在将 FDF 文件输出到浏览器,希望它将用户重定向到填写的 PDF,但对于某些人来说并非如此。 FDF 内容正在输出到屏幕,即使我使用的是 header('Content-type: application/vnd.fdf');
【问题讨论】:
是否可以仅使用 PHP 将 FDF 数据与 PDF 文件合并?还是别无选择,只能使用 3rd 方命令行工具来实现这一点?
如果是这样的话,有人可以指出我的方向吗?
我目前正在将 FDF 文件输出到浏览器,希望它将用户重定向到填写的 PDF,但对于某些人来说并非如此。 FDF 内容正在输出到屏幕,即使我使用的是 header('Content-type: application/vnd.fdf');
【问题讨论】:
http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/concatenate-fake/
这个可行,类下载也从网站链接到,
它不需要 passthru/exec 命令,也不需要额外的扩展。
编辑说,这不适用于较新的 pdf 版本 1.5+,恢复为 PDFTK,繁琐但适用于使用“exec”命令的所有 pdf。
【讨论】:
今天还有另一种方式,不使用 passthru 或 pdftk,而只是 2004 年制作的脚本,但仍然运行良好:forge_fdf
它可以帮助您构建一个 fdf,您可以将其直接合并到您的 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 文件(或者,我记得有一种方法可以将其保存到磁盘)并且字段电子邮件将填充数据来自 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
然后
yum 安装 pdftk
就是这样!
【讨论】:
为了将来参考,如果没有第 3 方应用程序,似乎没有可靠的方法可以做到这一点。 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");
【讨论】:
fill_form 也适用于 XFDF 数据。如果您想在生成的 PDF 中组合可编辑和只读字段,请在生成 PDF 时为要填写的字段设置“只读”属性。只读字段将由 PDFTK 填写,但最终用户无法编辑。