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 ©