2013-03-06 79 views
8

我有一个带有可编辑字段的PDF。我希望将HTML表单中的值传递给此PDF。我试过使用FPDF并且它可以工作,但是在将值传递给PDF之后,pdf中的字段不再可编辑。用PHP将值插入到可编辑的PDF中,并保持可编辑

另一个缺点是我们必须在将值传递给PDF时为每个字段指定精确的坐标。我可以使用其他工具来保留“PDF可编辑”的任何想法?

我用下面的代码来生成PDF http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/simple-demo/

+0

我见过的大多数PDF库都没有这个功能。谷歌搜索揭示了这一点,虽然:http://www.quickpdflibrary.com/faq/render-a-pdf-document-and-include-editable-form-fields.php – 2013-03-06 05:28:51

+0

谢谢马特。让我看看这个。 – 2013-03-06 05:39:52

回答

5

我无法找到本地PHP中的PDF填充的方法,我真的很喜欢。相反,我使用PHP生成XFDF,然后使用pdftk将其推送到可填写的PDF中。 (请注意,此代码需要你的PDF领域被命名。)

下面是一个例子函数从关联数组产生XFDF:

function forge_xfdf($file,$info,$enc='UTF-8'){ 
    $data='<?xml version="1.0" encoding="'.$enc.'"?>'."\n". 
     '<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">'."\n". 
     '<fields>'."\n"; 
    foreach($info as $field => $val){ 
     $data.='<field name="'.$field.'">'."\n"; 
     if(is_array($val)){ 
      $data.='<</T('.$field.')/V['; 
      foreach($val as $opt) 
       $data.='<value>'.$opt.'</value>'."\n"; 
     }else{ 
      $data.='<value>'.$val.'</value>'."\n"; 
     } 
     $data.='</field>'."\n"; 
    } 
    $data.='</fields>'."\n". 
     '<ids original="'.md5($file).'" modified="'.time().'" />'."\n". 
     '<f href="'.$file.'" />'."\n". 
     '</xfdf>'."\n"; 
    return $data; 
} 

然后,我写的XFDF到一个临时文件。

$empty_form  = '/path/to/fillable/pdf/form.pdf' 
$fdf_filename = tempnam(PDF_TEMP_DIR, 'fdf'); 
$output_filename = tempnam(PDF_TEMP_DIR, 'pdf'); 
$fdf_data = forge_xfdf($empty_form, $data, 'UTF-8'); 

if($fdf_fp = fopen($fdf_fn, 'wb')){ 
    fwrite($fdf_fp, $fdf_data); 
    fclose($fdf_fp); 

    $command = '/usr/local/bin/pdftk "'.$empty_form.'" fill_form "'.$fdf_filename.'" output "'.$output_file.'" dont_ask'; 
    passthru($command); 

    // SEND THE FILE TO THE BROWSER 

    unlink($output_file); 
    unlink($fdf_filename); 
} 

如果想要一个不可编辑的PDF,字dont_ask前添加的命令字flatten


如果没有连接到填充PDF表单,您可以生成HTML的形式为好,然后用dompdf从HTML转换为PDF。