Una delle features che molto spesso vengono richieste all’ interno di web application, è la possiblità di poter effettuare delle esportazioni dati, che vanno dai report, dalle tabelle alla compilazione automatica di modulistica. Con la maggior parte dei formati, il modello dell’ esportazione viene definito nel codice dal programmatore, sulla base delle indicazioni del cliente. Il cliente quindi non ha la possibilità di poter modificare autonomamente il modulo da compilare, e ogni modifica richiesta deve essere effettuata dal programmatore. Adobe, con il formato PDF, negli ultimi anni ha introdotto molte novità nella gestione del flusso documentale elettonico. Già dalla versione 1.6, è possibile creare modelli PDF, leggibili da Adobe Reader, contenenti moduli dove l’ utente ha la possibilità di compilare i campi e distribuirlo (via posta elettronica, via fax o stamparlo). In questo post spiegherò quali script PHPsono necessari per riempire dinamicamente un modello PDF da un front-end HTML.
Per creare modelli pdf sono disponibili due prodotti: Adobe Acrobat e Adobe Designer. Il primo, dispone di funzioni base per la creazione di form, mentre il secondo è un applicazione che nasce solo ed esclusivamente per fare quello. Entrambi questi editor permettono di creare dei veri e propri form, e come avviene nell’ html, ad ogni campo del modulo si associa un nome univoco. Le informazioni sulla struttura del modello e i dati compilati vengono memorizzati in un file FDF (Form Data Format, formato dati modulo). A partire dalla versione 1.6 dello standard PDF, l’ FDF viene generato sotto forma di file xml, che ora viene nominato XFDF. Le fasi per creare un modulo in Adobe Acrobat sono descritte in questo pdf, tratto dalla documentazione ufficiale di Adobe.
Ottenere il PDF significa quindi fondere assieme il modello con il relativo file FDF.
Adobe mette a disposizione dei programmatori l’ Acrobat Forms Data Format (FDF) Toolkit. Nella documentazione è chiaramente esplicitato che le api messe disposizione non sono in grado di leggere il nuovo formato XFDF, ma solo il formato FDF. Sono supportati ActiveX, Perl, C, Java ma NON il caro PHP.
Una libreria php molto famosa è Pdftk, un toolkit che permette di creare ed editare pdf. Pdftk, attraverso le sue api, è in grado di effettuare il merging tra modello e FDF, generando quindi un nuovo file pdf. Il progetto pare sia fermo dal 2005 e funzionante con lo standard inferiore all’ 1.6. Inoltre la fusione è delegata alla libreria php.
Una soluzione che a mio parere è decisamente migliore è quella di delegare la fusione tra modello e FDF/ XFDF all’ Adobe Reader. I vantaggi che derivano da questa strategia non sono pochi:
Justin Koivisto, sviluppatore Zend certificato, ha realizzato 2 script php in grado di creare sia il file FDF che XFDF, a partire da un modello pdf esistente. All’ interno del suo sito è possibile trovare un ottimo tutorial: si parte dalla creazione del modello pdf e si termina con un esempio pratico di utilizzo dei 2 script. Il codice dell’ esempio è scaricabile da questo indirizzo. Come è possibile vedere dallo script di esempio, una volta creato il file FDF dal front-end e, aperto con Adobe Reader, quest’ ultimo si aggancierà col modello pdf e lo riempirà con le informazioni contenute nel file FDF. A questo punto basta salvare il documento sulla propria scrivania.
PS: Sono ben accetti commenti, suggerimenti e riscontri, anche su altri metodi utilizzabili
4 Responses
PISK
October 8th, 2008 at 6:19 pm
1Stavo cercando da tempo questa soluzione.Sono un autodidatta e fino ad ora sono riuscito solo a crare in HTML , spero di riuscire a mettere in pratica anche questa soluzione anche se la mia è un pò più complicata.
I miei campi del forms HTML sono campi a scelta a tendina e la risultanza delle scelte, separati da; , dovrebbe riempire due o più campi del PDF finale ed inoltre contemporaneamente all’invio per creare il PDF dovrebbe anche inviarne copia, in formato XML, ad un indirizzo di posta elettronica, come i normali forms HTML.Riuscite a darmi un’ulteriore dritta ?
Auro
October 9th, 2008 at 7:47 pm
2ciao Pisk, prima domanda: con che linguaggio devi fare queste cose??
PISK
November 9th, 2008 at 7:16 pm
3Non ha importanza poichè fin’ora ho solo utilizzato HTML.Ho studiato un pò questo esempio in php ma non riesco ad individuare le variabili dei vari campi all’interno del file e non riesco nemmeno a far funzionare in lcale l’esempio.L’ottimale sarebbe avere di partenza un HTML form che sò già usare e quindi sò dove scrivere le variabili (ho già un form sul mio web ) che però attualmente provvede solo ad inviarmi la mail.Potrei inviare una sorta di file di prova dove c’è il file di form iniziale ed uno in pdf che dovrebbe essere la risultante.Tipo: se io scelgo in un campo del form il nome Pinco Pallo nel PDF deve risultare in un campo = Pinco in un altro Pallo in un altro ancora =256 e in un altro = K ;
PINCO PALLO
TIZIO NOME
CAIO COGNOME
SEMPRONIO ROSSI
etc
PISK
November 9th, 2008 at 7:21 pm
4Vedo che nel precedente post non si legge per intero gli esempi che ho scritto ma solo i nomi risultanti.In realtà nel form quando viene scelto un nome ad esso sono collegati altri tre dati separati da ;
RSS feed for comments on this post · TrackBack URI
Leave a reply
Categorie
Archivi
Amici
Links
Antipixel
Meta
Ultimi articoli
Ultimi commenti
I più commentati
CriticalSection is proudly powered by WordPress - BloggingPro theme by: Design Disease