Figura 1 - L`output del programma hello.php

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 ©