Laboratorio di sistemi Produrre pdf Php Per produrre pdf in php, esistono diverse librerie gratuite, inclusa la libreria di base fornita col Php. Noi usiamo la classe EZPDF di R&OS ltd. Veniamo a qualche semplice esempio. File hello.php <?php require "class.ezpdf.php"; // Crea un nuovo documento PDF $doc = new Cezpdf(); // Imposta il testo. Se non specifico il font, il sistema // assume l’Helvetica come font di base. // Il formato della pagina per default è un A4 $doc->ezText("Hello, world!"); // Manda in output il documento $doc->ezstream(); ?> Figura 1 - L'output del programma hello.php Per aggiungere un’immagine, usiamo l’istruzione $doc->ezImage("pic/pic_medbatman.jpg","","","none"); Il primo parametro rappresenta il percorso dell’immagine e il nome dell’immagine jpg o png da inserire. Il secondo lo spazio in punti da inserire intorno all’immagine (per default 5), il terzo è la larghezza (per default la larghezza effettiva dell’immagine), il quarto serve per ridimensionare l’immagine e un quinto parametro serve per giustificare l’immagine (per default è center). Il sesto il bordo attorno all’immagine (per default vale none). pdf_in_php.pdf Pag. 1/4 Cozzetto © Laboratorio di sistemi Produrre pdf Php Figura 2 - Il pdf contiene un'immagine centrata con le dimensioni originali Per inserire delle tabelle, scriviamo il seguente codice (file gen_pdf.php) <?php require "class.ezpdf.php"; $doc = new Cezpdf(); // Definisco un array associativo $table = array( array("Col A"=>"Valore della array("Col A"=>"Valore della array("Col A"=>"Valore della array("Col A"=>"Valore della array("Col A"=>"Valore della ); colonna colonna colonna colonna colonna A A A A A 1", "Col 2", "Col 3", "Col 4", "Col 5", "Col B"=>"Valore B"=>"Valore B"=>"Valore B"=>"Valore B"=>"Valore della della della della della colonna B colonna B colonna B colonna B colonna B 1"), 2"), 3"), 4"), 5") // Cambio il font di default usando il Courier-Bold. Il font va indicato con il percorso // completo e l’estensione completa $doc->selectFont("../pdf/fonts/Courier-Bold.afm"); $doc->eztable($table); // Mando in output il documento $doc->ezstream(); ?> pdf_in_php.pdf Pag. 2/4 Cozzetto © Laboratorio di sistemi Produrre pdf Php Figura 3 - La tabella contenuta nel pdf A questo punto è facile ottenere un report contenente una serie di prodotti con relativo ID e categoria di appartenenza (per comodità usiamo il database Access NorthWind fornito con l’installazione del programma). Creiamo un DSN di sistema e usiamo le classi del package PEARDB. File products_pdf.php <?php require "class.ezpdf.php"; require_once("DB.php"); // Contiene I parametric di accesso al db require_once("param.php"); $doc = new Cezpdf(); // Inizializzo un array $table=array(); $doc->selectFont("../pdf/fonts/Courier-Bold.afm"); $dsn="$dbtype://$username:$password@$host/$dbname"; $conn=DB::connect($dsn); if (DB::isError($dsn)) die("Impossibile connettersi: ". $conn->getMessage()); $sql="SELECT [Product List].ProductID, [Product List].ProductName, Categories.CategoryName FROM Products AS [Product List] INNER JOIN Categories ON [Product List].CategoryID = Categories.CategoryID WHERE ((([Product List].Discontinued)=No)) ORDER BY Categories.CategoryName"; $result=$conn->query($sql); if (DB::isError($result)) die("Impossibile eseguire la query: ". $result->getMessage()); ?> pdf_in_php.pdf Pag. 3/4 Cozzetto © Laboratorio di sistemi Produrre pdf Php <?php while ($row=$result->fetchRow(DB_FETCHMODE_ASSOC)) { $table[]=array( "Product ID"=>$row["ProductID"], "Product Name"=>$row["ProductName"], "Category Name"=>$row["CategoryName"] ); } $doc->eztable($table); $doc->ezstream(); ?> File param.php <?php $host="localhost"; $username="root"; $password=""; //nome dell’odbc precedentemente costruito $dbname="northwind"; //tipo di database (mysql per MySQL, oci8 per Oracle, mssql per Microsoft Sql Server, // pgsql er Postgres ecc) $dbtype="odbc"; ?> Figura 4 - Viene generato un pdf con 2 pagine numerate pdf_in_php.pdf Pag. 4/4 Cozzetto ©