代码之家  ›  专栏  ›  技术社区  ›  James

使用PHP将FDF数据合并到PDF文件中

  •  20
  • James  · 技术社区  · 16 年前

    是否可以单独使用PHP将FDF数据与PDF文件合并?或者,除了使用第三方命令行工具之外,是否没有其他选择来实现这一点?

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

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

    4 回复  |  直到 15 年前
        1
  •  30
  •   James    16 年前

    为了将来参考,没有第三方应用程序似乎没有一种可靠的方法。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");
    

    抱歉,如果这是基本的东西,我想我会把它放在一个地方,这样人们就不会经历我忍受的头痛。

    注意:如果未设置路径变量,则需要使用pdftk的完整路径,即

        passthru("/usr/local/bin/pdftk file.pdf fill_form data.fdf output - flatten");
    
        2
  •  3
  •   Aureltime    15 年前

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

        3
  •  2
  •   Tom    15 年前

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

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

    然后

    yum安装pdftk

    就是这样!

        4
  •  1
  •   TomW    15 年前

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

    这样,下载的类也可以从网站链接到,

    它不需要passthru/exec命令,也不需要其他扩展。

    编辑为说,这不适用于更新的PDF版本1.5+,恢复为pdftk,但使用“exec”命令与所有pdf一起工作。