21

是否可以仅使用 PHP 将 FDF 数据与 PDF 文件合并?还是别无选择,只能使用第 3 方命令行工具来实现这一目标?

如果是这样的话,有人可以指出我的方向吗?

我目前正在将 FDF 文件输出到浏览器,希望它将用户重定向到填写的 PDF,但对于某些人来说并非如此。FDF 内容正在输出到屏幕,即使我使用的是 header('Content-type: application/vnd.fdf');

4

4 回答 4

33

以供将来参考,如果没有 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");
于 2009-09-07T18:28:42.043 回答
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 中打开良好,它必须与其他浏览器一起测试。

有关PDF HACKS的更多信息

于 2011-04-26T04:56:44.907 回答
2

到目前为止,我发现在 centos 上安装 pdftk 的最简单方法:

安装 rpmforge 存储库 - http://wiki.centos.org/AdditionalResources/Repositories/RPMForge#head-5aabf02717d5b6b12d47edbc5811404998926a1b

然后

百胜安装pdftk

就是这样!

于 2010-11-20T07:18:23.867 回答
1

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

这行得通,课程下载也从网站链接到,

它不需要 passthru/exec 命令,也不需要额外的扩展。

编辑说,这不适用于较新的 pdf 版本 1.5+,恢复为 PDFTK,繁琐但适用于使用“exec”命令的所有 pdf。

于 2011-04-14T09:30:56.597 回答