Guida per la compilazione dei moduli di un file pdf in php senza l’ausilio di librerie esterne.
Ambiente:
Macchina linux (Ubuntu 14.04 + LAMP)
se non presente installare il seguente software
sudo apt-get install pdftk
Immaginiamo di ricevere i campi da compilare da un form HTML in post.
Per ‘compilare’ il pdf da php, basta generare un file xfdf che servirà da input a pdftk per compilare i campi del pdf.
Per fare questo usiamo la funzione createXFDF
E’ molto semplice da fare, basta passare alla funzione l’url del file
e un array associativo key:value.
Codice
———————————– file submit.php —————————————
// (Compila moduli pdf da form php )
// dati ricevuti da form html
$azienda=$_POST['ragionesociale'];
$piva=$_POST['piva'];
$citta=$_POST['citta'];
$via=$_POST['via'];
$nome=$_POST['nome'];
$cognome=$_POST['cognome'];
// creo array con key:value
// da notare che la chiave deve identificare il textfield compilabile all'interno del file pdf
// se non si conoscono le key del file pdf basta eseguire il comando
// pdftk modulo.pdf dump_data_fields
$data = array (
'Testo1' => $azienda,
'Testo2' => $citta,
'Testo3' => $via,
'Testo4' => $piva,
'Testo5' => $nome.' '.$cognome
);
$pdf_file_url = 'http://localhost/registrazione/modulo.pdf';
//creo il file XFDF
$xfdf = createXFDF( $pdf_file_url, $data );
$result_directory = dirname(__FILE__) . '';
$xfdf_file = time() . '.xfdf';
$xfdf_file_path = $result_directory . '/' . $xfdf_file;
// scrivo il file XFDF
if( $fp = fopen( $xfdf_file_path, 'w' ) )
{
fwrite( $fp, $xfdf, strlen( $xfdf ) );
}
fclose($fp);
// path interno dello stesso file ($pdf_file_url = 'http://localhost/registrazione/modulo.pdf';)
$pdf_template_path = dirname( __FILE__ ) . '/modulo.pdf';
$pdftk = '/usr/bin/pdftk';
$pdf_name = substr( $xfdf_file_path, 0, -4 ) . 'pdf';
$command = "$pdftk $pdf_template_path fill_form $xfdf_file_path output $pdf_name flatten";
exec( $command, $output, $ret );
echo 'file compilato generato = '.$pdf_name;
function createXFDF( $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 ) )
{
foreach( $val as $opt )
$data .= '<value>' .
htmlentities( $opt, ENT_COMPAT, $enc ) .
'</value>' . "\n";
}
else
{
$data .= '<value>' .
htmlentities( $val, ENT_COMPAT, $enc ) .
'</value>' . "\n";
}
$data .= '</field>' . "\n";
}
$data .= '</fields>' . "\n" .'<ids original="' . md5( $file ) . '" modified="' .time() . '" />' . "\n" .
'<f href="' . $file . '" />' . "\n" .'</xfdf>' . "\n";
return $data;
}
———————————- end submit.php —————————————
Le mie Considerazioni
Il file di esempio “submit.php” per la compilazione di moduli pdf da form è funzionante se rispettato l’ambiente di sviluppo.
Di fondamentale importanza è la libreria pdftk. Consiglio di installarla su ambiente Linux, l’ho testata su molte distribuzioni Debian e non ha problemi. Sconsiglio vivamente di provare il tutto su ambiente Windows o Mac, comandi e istruzioni potrebbero essere molto diversi.
2 comments
zorivare worilon
1 Luglio 2022 at 13:54
Hi! Do you know if they make any plugins to safeguard against hackers? I’m kinda paranoid about losing everything I’ve worked hard on. Any tips?
zoritoler imol
2 Novembre 2022 at 6:30
You made some nice points there. I looked on the internet for the subject matter and found most individuals will consent with your blog.