Convertire file HTML in PDF automaticamente Online
Scritto il 28 Gennaio, 2010 - 11:04 by DaNieL
Tuttora non riusciamo del tutto a spiegarci perchè trovare un convertitore html-to-pdf decente utilizzabile in un’applicazione online è così problematico, e sopprattutto perchè Adobe non abbia pensato a sviluppare un applicativo per farlo (visto che il pdf è cosa loro)..
Mhà, così va il mondo.
Comunque, in 2 anni e mezzo di test, prove, imprecazioni varie e (pochi) successi, questi sono i nostri risultati:
| CSS | Qualità | Peso del file | Tempo (sec.) | Voto D. | Voto L. | |
| HTML2PS | Ottimo | 814 Kb | 15-18 | 7 | 5,5 | |
| HTMLDOC | Buono | 164 Kb | 4-5 | 6 | 7 | |
| Firefox + Command line print | Ottimo | 382 Kb | 5-6 | 8 | 8 | |
| Wkhtmltopdf | Ottimo | 207 Kb | 3-4 | 9 | 9 |
Può sembrare un’operazione banale, invece, è diventata un’odissea, che dura da 2 anni e mezzo.. e che ancora non è totalmente finita.
Perchè creare un PDF al volo, on-the-fly, da un documento html?
Innanzitutto perchè un pdf è più difficile da modificare, può essere inviato tramite email (sempre automaticamente, perchè no) e sicuramente si presenta molto meglio di un file html.
Inoltre in un file html le immagini e i css sono spesso esterni: diventa problematico inviarli (o permetterne il download) e avere la certezza che il destinatario visualizzi esattamente quello che noi visualizziamo.. col pdf tutto questo è risolto.
Esistono già molti metodi, open source anche, per creare file pdf dinamicamente (da php o python, ad esempio)
Vero, ma la nostra esigenza (e non solo la nostra) è di convertirlo: creare, e modificare successivamente, una pagina (x)Html è molto semplice… perchè devo ricreare la stessa pagina in linguaggio pdf? E quando cambio qualcosa nella mia pagina, devo rimettermi a modificare anche la pagina pdf.. perchè, quando ho già il sorgente?
HTML2PS
Classe PHP che converte la pagina prima in ghostscript, poi in pdf. Lo abbiamo testato e provato a lungo, funziona davvero bene e ha una compatibilità con i CSS 2.0 molto buona.. ma non manca di difetti. In primis la configurazione del PHP: ha bisogno di molte risorse per fare quello che deve fare,e quindi alcuni parametri vanno aggiustati dal php.ini:
max_execution_time = 600
10 minuti.. dovrebbero bastare, solitamente riesce in 15-30 secondi, ma tutto dipende dal server e dalla complessità della pagina.
memory_limit = 450M
450Mb di memoria per l’allocazione.. se vi sembrano tanti, pensate che qualcuno consiglia addirittura 1024Mb (1Gb!)
backtrack_limit = 2000000
Idem come sopra; probabilmente 2000000 è un pò esagerato, ma è per stare sicuri.
Inoltre, dovete assicurarvi che tutti i font presenti nella pagina da convertire siano anche presenti nella sua cartella (html2ps/fonts).. questo è un problema facimente risolvibile, se avete un controllo diretto sull’origine delle pagine da convertire..
Quindi, funziona bene sì, ma richiede troppe risorse.. inoltre un domani, con l’avvento dei CSS 3.0 sorgerebbe il problema di aggiornare le classi.. che sono moolto grandi.
Un esempio della nostra home page convertita in pdf con html2ps potete scaricarlo scaricarlo QUI (814Kb).
DOMPDF
Altra classe PHP, già dichiaratamente ha un supporto dei CSS inferiore, lo abbiamo abbandonato praticamente subito..
Più lento di html2ps, con gli stessi difetti, file generati estremamente più grandi. Ammetto di averlo testato poco, ma non ci ha dato una buona impressione..
HTMLDOC
Eccoci qui, questo è un piccolo carro-armato!
Veloce (2-3 secondi in media, ma anche qui dipende sempre dal server e dalla dimensione/complessità della pagina), affidabile (in 2 anni e mezzo che lo utilizziamo non si è mai bloccato), open source (ma la versione compilata è a pagamento).
Unico piccolo (ma grande) difetto: dimenticatevi pure dei CSS, questo lavora ancora con le vecchie definizioni html (<font color=”…”> ecc..)
Un esempio (…tristissimo, senza il css) della nostra home page con HTMLDOC lo potete visualizzare qui (164Kb).
Poi, finalmente, l’idea
Pensateci un attimo, html2ps, dompdf, htmldoc, cosa fanno? Renderizzano, interpretano la pagina html e la convertono in pdf.
I primi due renderizzano ogni singolo tag, tenendo conto dei CSS (con risultati ottimi per html2ps, non saprei con dompdf) e creano l’output pdf.
Htmldoc ignora i css (quando fù sviluppato i css erano ancora agli arbori).
Qual’è il software che interpreta meglio l’html?
Ovviamente un Browser.
Il browser è fatto per macinare html in tutte le salse, css o meno.. poi ovvio c’è chi lo fà meglio (firefox!) e chi.. bhè lo sappiamo.
Abbiamo quindi provato a proporre questa idea sui forum mozilla , e torisugari ci è venuto in aiuto sviluppando un’estensione per stampare con firefox da command-line.. e che dire, funziona una meraviglia!
Tuttavia sono un pò restio ad utilizzare un browser come strumento in questo senso.. firefox non è specificatamente fatto per questo senso, possiamo dire che questa funziona rappresenta il 5% della struttura di firefox.. insomma, ci sono troppe variabili, troppe cose che potrebbero andare male (si, purtroppo anche firefox a volte và in crash…) che non mi fanno dormire tranquillo nell’utilizzarlo in ambiente di produzione.
Comunque sia, dopo alcuni test e aggiustamenti vari, finalmente funziona: tempo di conversione 2-5 secondi, qualità? Giudicate voi. (382Kb)
Quindi, la soluzione è firefox? Sembra di no (o almeno finchè non riusciamo a trovare il modo di isolare il renderizzatore html di firefox e usarlo separatamente dal browser), perchè googlando siamo incappati in questo articolo: HTML to PDF, why so hard? dove nei commenti finali abbiamo scoperto wkhtmltopdf.
WKHTMLTOPDF
Ed eccoci, finalmente, a quello che probabilmente sostituirà htmldoc nei nostri server: utilizza webkit (il renderizzatore usato da Safari, praticamente quello che Gecko è per Firefox), tempi di conversione simili a quelli di Firefox (anzi, leggermente inferiori), e una qualità ottimale: provare per credere! (207Kb)
Unico neo: non supporta il Thead (che invece supporta firefox).
Conclusioni
HTML2PS è sicuramente una scelta valida, a patto però che se ne faccia un uso abbastanza limitato (è veramente troppo lento e occupa troppe risorse). Diventa l’unica alternativa per le applicazioni web che risiedono su hosting low-cost (ma che permettono la modifica, anche temporanea con ini_set(), dei parametri del php.. quindi con il safe_mode off) che non permettono di installare software sul server.
HTMLDOC è senza dubbio il più stabile e affidabile (posso dirlo solo perchè è l’unico che utilizziamo da più di 2 anni e non ha mai dato problemi), la qualità del PDF è ottima.. ma la sua completa incompatibilità coi CSS è un problema che, a parer mio, lascerà morire il progetto lentamente (se non lo è già)
Firefox con estensione Command Line Print e WKHTMLTOPDF se la giocano quasi alla pari, entrambi veloci e con un ottima compatibilità e qualità… sicuramente WKHTMLTOPDF è più semplice da installare, ed essendo un progetto recente è molto attivo; Firefox d’altro canto può contare su un’intera comunità di sviluppatori e, forse è più una speranza che una certezza, prima o poi verrà realizzato qualcosa di più utilizzabile in questo senso.
Categoria





Qualcosa da dire