是否可以仅使用PHP将FDF数据与PDF文件合并?或者除了使用第三方命令行工具来实现这个目的之外别无选择吗?
如果是这种情况,有人能指出我的方向吗?
我目前正在将FDF文件输出到浏览器,希望它将用户重定向到填写的PDF,但对于某些人来说并非如此。 FDF内容正在输出到屏幕,即使我使用标题('Content-type:application / vnd.fdf');
答案 0 :(得分:31)
为了将来参考,看起来如果没有第三方应用程序,就没有可靠的方法。 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");
道歉,如果这是基本的东西,只是想我把它放在一个地方,这样人们就不会经历我忍受的头痛。
N.B。如果未设置PATH变量,则需要使用pdftk的完整路径,即
passthru("/usr/local/bin/pdftk file.pdf fill_form data.fdf output - flatten");
答案 1 :(得分:3)
还有另一种方式,不使用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中打开很好,必须与其他浏览器一起测试。
上的更多信息答案 2 :(得分:2)
安装rpmforge repo - http://wiki.centos.org/AdditionalResources/Repositories/RPMForge#head-5aabf02717d5b6b12d47edbc5811404998926a1b
然后
yum install pdftk
就是这样!
答案 3 :(得分:1)
http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/concatenate-fake/
这样做,类下载也从网站链接到
它不需要passthru / exec命令,也不需要额外的扩展名。
编辑说,这不适用于较新的pdf版本1.5+,恢复为PDFTK,但是使用'exec'命令可以与所有pdf一起使用。