2013-03-06 88 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。