non sono riuscito a trovare un metodo di riempimento PDF in modo nativo in PHP che mi è piaciuto. Invece, io uso PHP per generare XFDF, quindi uso pdftk per inserirlo nel PDF compilabile. (Si noti che questo codice richiede campi del PDF di essere nominato.)
Ecco un esempio di funzione per generare XFDF da un array associativo:
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;
}
Poi, mi scrivono che XFDF in un file temporaneo.
$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);
}
Se fai vuole un PDF non modificabile, aggiungere la parola flatten
nel comando prima della parola dont_ask
.
Se non si è attaccato a riempire un modulo PDF, si potrebbe generare il form in HTML e, quindi utilizzare dompdf convertire da HTML a PDF.
fonte
2013-03-12 20:06:57
La maggior parte delle librerie PDF che ho visto non hanno questa funzionalità. Una ricerca su Google ha rivelato questo: http://www.quickpdflibrary.com/faq/render-a-pdf-document-and-include-editable-form-fields.php –
Grazie Matt. Fammi vedere questo. –