PHP17 Novembre 2015by Daniele Carnovale2Compila moduli Pdf da form php

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?

    Reply

  • 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.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *