Reportes con Header & Footer

Buenas Gente,
quisiera saber si es posible generar un reporte en toba y que me permita tener una seccion de header donde poner un logo y un footer para ir ponienedo el paginado (Ej: “Pagina 1 de N”). Si todo esto es posible, como se haria ?

Saludos…

Hola Tucho,

contame un poco mas como viene la mano, estas haciendo el reporte directamente en HTML, estas usando un cuadro?
Te cuento que existe la clase toba_impr_html que te puede venir bien, dentro de la misma existen los metodos ‘encabezado’ y ‘pie’, lo que podrias hacer es una extension de dicha clase donde esos metodos se encuentren redefinidos, de esta forma tendrias de forma transversal a toda la aplicacion el logo. Recorda que el navegador te saca al pie de pagina la leyenda ‘Pagina 1 de N’ de forma predeterminada cuando realizas una impresion.

Luego de realizar la extension de la clase lo que debes hacer es ir a las propiedades del proyecto (dentro del editor) y registrar la clase para que sea utilizada por toba. Similar a lo que harias si registraste un contexto de ejecucion o una clase de usuarios personalizada.

Cualquier cosa avisanos.

Saludos
Richard

Richard,
la idea es generar un .pdf (en el encabezado va el logo, y en el pie el paginado “Pagina 1 de N”) de alguna forma, recien estoy comenzando con el tema.
Me conviene usar cuadros o toba_impr_html ?

Saludos…

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