【问题标题】:Merge FDF data into a PDF file using PHP使用 PHP 将 FDF 数据合并为 PDF 文件
【发布时间】:2010-11-26 06:33:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: php pdf fdf xfdf


    【解决方案1】:

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

    这个可行,类下载也从网站链接到,

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

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

    【讨论】:

      【解决方案2】:

      今天还有另一种方式,不使用 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

      【讨论】:

      • 我相信 forge_fdf for PHP 也是由 PDF Labs(Pdftk 的创建者)编写的。
      【解决方案3】:

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

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

      然后

      yum 安装 pdftk

      就是这样!

      【讨论】:

      • CentOS 7 不再支持
      【解决方案4】:

      为了将来参考,如果没有第 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 填写,但最终用户无法编辑。
      • CentOS 不再支持或安装 pdftk - 如果有人有替代方案,请告诉我们。
      • 如何在 Hostgator VPS 上安装 pdftk?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2011-01-04
      • 1970-01-01
      • 2014-04-19
      • 2016-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多