Hay varias librerías para generar PDF con PHP
Últimamente estoy utilizando: Cezpdf y me ha ido bien. Hay buenos ejemplos y un manual
http://blog.unijimpe.net/generar-pdf-con-php-y-mysql/
el manual lo puedes consultar en:
http://www.ds.uzh.ch/_files/uploads/presse/5.pdf
te coloco un ejemplo mio, práctico para que lo mires:
<?php
if (!isset($_SESSION)) { session_start();}
$propiedad = $_SESSION['nombre_prop'];
$nit = $_SESSION['nit_prop'];
$direccion = $_SESSION['direccion_prop'];
$ciudad = $_SESSION['ciudad_prop'];
$id_prop = $_SESSION['id_prop'];
$logo = $_SESSION['imagen'];
// llamo la libreria
require_once('src/Cezpdf.php');
$pdf =& new Cezpdf('LETTER','portrait');//pagina
$pdf->selectFont('src/fonts/Helvetica-BoldOblique.afm');// font
$pdf->ezSetCmMargins(1,1,1.5,1.5);// margenes
//me conecto a la base de datos
$conexion = mysql_connect("localhost", ".....", ".....");
mysql_select_db("mi B de D", $conexion);
$resultado_consulta_mysql=mysql_query($consulta_mysql,$conexion);
//para idiona español...
mysql_query("SET NAMES 'utf8'");
//hago la consulta a 2 tabla
$queEmp = "SELECT bdedp.nombre as BdeDP, bdedp.maticula as Matricula, propietarios.nombre as Propietario, bdedp.area as Area, bdedp.porc_t as Porcentaje, bdedp.tabla as Tabla FROM bdedp inner join propietarios on bdedp.id_propietario = propietarios.id WHERE bdedp.propiedad = '$id_prop' AND bdedp.activo = 'S' ORDER BY bdedp.tabla, bdedp.nombre";
$resEmp = mysql_query($queEmp, $conexion) or die(mysql_error());
$totEmp = mysql_num_rows($resEmp);
//enumero los campos que voy a imprimir
$ixx = 0;
while($datatmp = mysql_fetch_assoc($resEmp)) {
$ixx = $ixx+1;
$data[] = array_merge($datatmp);
}
//creo el array
$titles = array(
'BdeDP'=>'<b>Nombre BdeDP</b>',
'Matricula'=>'<b>Matrícula</b>',
'Area'=>'<b>Area M2</b>',
'Propietario'=>'<b>Propietario</b>',
'Porcentaje'=>'<b>Por Part %</b>',
'Tabla'=>'<b>Tabla</b>'
);
$titles = mb_convert_encoding($titles, "ISO-8859-1", "UTF-8");
$options = array(
'shadeCol'=>array(0.9,0.9,0.9),
'xOrientation'=>'center',
'width'=>500
);
$txttit.= " \n";
// Convierto las variables a idioma español
$propiedad = utf8_encode($propiedad);
$nit = utf8_encode($nit);
$direccion = utf8_encode($direccion);
$ciudad = utf8_encode($ciudad);
$txttit = "<b>$propiedad</b>\n";
$pdf->ezImage("../Logotipos/uploads/".$logo, 00,100,100,100);
$txttit.= "$direccion \n";
$txttit.= "$ciudad \n";
$txttit.= " \n";
$txttit.= "Listado de Bienes de Dominio Particular de la Copropiedad \n";
$txttit.= " \n";
$datacreator = array (
'Title'=>'Bienes de Dominio Particular de '.$propiedad,
'Subject'=>$propiedad,
'Author'=>'si-RPH',
'Producer'=>'http://www.legis.club'
);
$pdf->addInfo($datacreator);
//$pdf->setEncryption('toto', 'titi', array('copy'));
$pdf->ezText($txttit,16,array('justification'=>'center'));
//$pdf->ezText($txttit, 12);
$pdf->ezTable($data, $titles, '', $options);
$pdf->ezText("\n\n\n", 10);
$pdf->ezText("<b>Fecha del Informe:</b> ".date("Y-m-d"), 10);
$pdf->ezText("<b>Hora:</b> ".date("H:i:s")."\n\n", 10);
$pdf->ezStream();
?>
Listo... es un ejemplo práctico con logotipo variable de la empresa, Tablas anidadas...