giovedì 9 agosto 2007

Creare file PDF con Php


Visto che avevo parlato dei file zip creati con php, perchè non parlare anche dei file PDF? Sempre più questo formato prende piede ogni giorno...e potremmo avere la necessità di creare on-the-fly dei file PDF con i contenuti più vari. Le soluzioni native del Php sono praticamente tutte a pagamento oppure negate per un uso commerciale.
Ecco che viene in aiuto il mondo open-source con due progetti!
Il primo, chiamato FPDF (http://www.fpdf.org) è una classe che permette tramite semplici comandi di creare un PDF. Nel sito si trovano tutti gli esempi e i tutorial (ce ne sono veramente tanti). Come noterete in questa classe tutto è "cella", cioè per l'inserimento delle tabelle ad esempio tutto deve essere scritto con cura maniacale (questa cella con questo contenuto qui, quest'altra qua di queste dimensioni...).
Perchè non usare un linguaggio conosciuto e semplice come l'HTML?? La risposta ce la dà il secondo progetto, che si basa su FPDF ma si chiama HTML2(F)PDF (http://html2fpdf.sourceforge.net/) che permette in poche istruzioni di creare un file PDF...scrivendo in html!!
Bene. Ora i test: andate sul sito di html2fpdf e scaricate lo zippone che contiene tutto (dentro c'è anche fpdf). Importantissimo dentro c'è una cartella fonts, NON eliminatela!
Ho creato un semplice file per provare le funzionalità dello script:

<?
require_once("html2fpdf.php");
$html=file_get_contents("filehtml.html");
$pdf=new HTML2FPDF();
$pdf -> AddPage();
$pdf -> WriteHTML($html);
$pdf -> Output ('prova.pdf','I');
?>

In filehtml.html ho scritto il codice da trasformare, ho provato poche cose (ma nel sito c'è la lista completa dei tags supportati): ho provato un center, un b (grassetto), e una immagine. Notate che avrei potuto scrivere il codice HTML direttamente dentro la variabile $html (e quindi non necessariamente leggerlo da un file).
BUG: incredibile a dirsi, ma su linux non supporta i file GIF! Almeno credo su linux, forse anche su windows (sulla mia ubuntu non va, e secondo google tanti hanno questo problema), fate un po' di prove...in sostanza se non trova le immagini contenute nel codice html, carica una immagine no_img.gif, e subito dopo dà errore irreversibile di lettura sulla gif...niente da fare, sostituendo con un'altra gif o cambiando i permessi è sempre uguale...appena ho inserito però una PNG....magia, tutto funziona! Non arrabbiatevi, visto che è gratis: un motivo in più per passare al formato PNG ;-)

Buon php a tutti!

3 commenti:

Anonimo ha detto...

Il sito che hai linkato non funziona. Ho scaricato cmq i file ma quando faccio un esempio come il tuo ottengo a schermo una serie di caratteri incomprensibili

Unknown ha detto...

Forse era una disfunzionalità temporanea del sito, sia http://www.fpdf.prg che http://html2fpdf.sourceforge.net/ a me funzionano perfettamente... in entrambi i siti trovi gli esempi d'uso!

Anonimo ha detto...

Ehm... hai provato questo codice prima di pubblicarlo online?
Non funziona...