Antes que nada un breve resumen de como están pensadas las salidas en toba. Existen tres tipo de salidas principales
- vista_impresion_html: Un HTML con una plantilla de estilos particular, usa toba_impr_html como pivot de la generación
- vista_pdf: Usa la librería ezPDF enmascarada (pero no oculta) en la clase toba_vista_pdf
- vista_excel: Usa la librería phpExcel enmascarada (pero no oculta) en la clase toba_vista_excel
Desde el punto de vista de la programación la ventaja de usar PDF en lugar de HTML es que tenes posicionamiento absoluto en x/y y más control en el cambio de página. Por ejemplo en HTML los navegadores ponen un encabezado/pie imposible de cambiar via script.
Cada componente de interface (ci, cuadro, form, ml y filtro) implementa estas tres salidas. En el proyecto toba_referencia hay un ejemplo que ejercita estas salidas.
Cuando en el cuadro activas el checkbox de PDF lo que hace es generar un link pidiendo la vista_pdf exclusivamente a este componente. Para poder incluir una serie de compoentes (y no solo un cuadro aislado) se puede hacer evento con un vínculo a la misma operación pidiendo el servicio vista_pdf, ahí el control lo tenés desde el CI (así esta hecho el ejemplo de toba_referencia).
Si estas usando la salida exclusiva del cuadro tenés que crear una extensión del cuadro y redefinir el método vista_pdf de la siguiente forma:
<?php
class extension_cuadro extends toba_ei_cuadro
{
function vista_pdf(toba_vista_pdf $salida)
{
//Cambio lo márgenes accediendo directamente a la librería PDF
$pdf = $salida->get_pdf();
$pdf->ezSetMargins(80, 50, 30, 30); //top, bottom, left, right
//Pie de página
$formato = 'Página {PAGENUM} de {TOTALPAGENUM}';
$pdf->ezStartPageNumbers(300, 20, 8, 'left', $formato, 1); //x, y, size, pos, texto, pagina inicio
//Invoco la salida pdf original del cuadro
parent::vista_pdf($salida);
//Encabezado
foreach ($pdf->ezPages as $pageNum=>$id){
$pdf->reopenObject($id);
$imagen = toba::proyecto()->get_path().'/www/img/logo_toba_siu.jpg';
$pdf->addJpegFromFile($imagen, 50, 780, 141, 45); //imagen, x, y, ancho, alto
$pdf->closeObject();
}
}
}
?>
Algunas cosas a tener en cuenta
- La imagen solo soporta jpg y png, estos últimos no pueden tener transparencias. Si le das un archivo no existente o incorrecto no tira error y no se muestra lo que hace dificil de debuggear. En la ultima revision de trunk_versiones/1.4 agregue una linea para que envie al logger los mensajes internos de la librería, los podés acceder usando $pdf->messages (es un string)
- Estas accediendo directamente a variables y métodos de la librería ezPDF, no parece muy estable y cuidada esta librería pero era lo mejorcito hace algunos años, tené en cuenta que cualquier cambio de versión puede llegar a romper esta extensión