Xzypdf

Por Luis Martínez Ulloa.


Métodos

Atributos

Uso

Por hacer

Enlaces




Características

Esta clase surgió por la necesidad de imprimir en el lado del usuario, sin las limitaciones que tiene el browser. Específicamente, el formato del texto, fondo, y la orientación del papel. Por lo general, no tenemos elección a menos que pudiéramos persuadir al usuario que realice la configuración deseada. A partir de aquí, se hizo notorio usar pdf como formato de salida intermedio. Opté por usar FPDF como base, las pruebas fueron esperanzadoras, gracias al método Cell.

De tablas html a xzypdf[³]

A diferencia del html, el pdf es menos estructurado, pues se necesita “ir pintando” las partes de nuestro documento por coordenadas. Esta estructura se va implementando en xzypdf con respecto a los datos tabulares.

Para pasar del html, tablas, css, necesitaba algo que se comporte como las celdas de una tabla. Se utiliza una matriz de anchos de columna para aproximarse al comportamiento de una tabla formateada en columnas de distinto ancho. Las filas son de igual altura. Las celdas, bajo ciertas restricciones, pueden imprimirse como multilínea automáticamente.

Los atributos permiten la modificación de la apariencia de las celdas en forma más cómoda, cuando se les pasa como arreglos asociativos. Una ventaja adicional de esto es que estos arreglos pueden serializarse y de esta forma almacenarse como cadenas en bases de datos. Por ello, parte de las mejoras futuras serán el paso de métodos nativos a atributos, incluyendo la autoimpresión[⁴].

Inicialmente, al crear una instancia de xzypdf, los atributos son “precargados” con los valores por defecto.




Métodos de xzypdf

Métodos principales

Método _cell

Sintaxis: _cell($text, $attrs = null)

Su nombre se distingue del método cell original por tener una función distinta.

Imprime el texto, asignándole los atributos en $attrs. Los atributos quedan fijados en el nuevo valor. Ejemplo:


$style1 = array('col'=>5,'row'=>3,'cols'=>2,'rows'=>1);
$xzypdfinstance->_cell('Hello',$style1);


*A diferencia del método cell, _cell emite texto multilínea dependiendo de los atributos proporcionados; esto es, integra fpdf::cell y fpdf::multiCell en una sola función.



Método setvars

Sintaxis: setvar($attrs)

Fija los atributos según los nuevos valores. Ejemplo:


$pdf->setvars(array('widths'=>$anchoscol,'background'=>$gris));
$pdf->setvars($estilos1['iniciales']);




Método AutoPrint

AutoPrint($dialog=false)

Imprime el documento vía javascript, sin el diálogo de impresión si el parámetro es false.

Por defecto la impresión se dirige a la impresora predeterminada del sistema cliente.






Atributos

Los atributos y sus valores predeterminados en una instancia de xzypdf son:

'align' => 'L' LCRJ (Left, Center, Right, Justify)
'border' => 0, (0,1, LRTB – Left,Right, Top, Bottom)
'fill' => false,
'attr' => '',
'height' => 6, (en las unidades del documento)
'row' => 0,
'col' => 0,
'ln' => 0, (0,1,2 - no se utiliza, ver documentación del método fpdf::cell)
'family' => 'Arial', (fuente)
'style' => '',
'size' => 9, (en unidades del documento)
'top' => 0,
'left' => 0,
'rows' => 1,
'cols' => 1,
'multicell' => false,
'clip' => false,
'color'=>0, (valor de brillo, puede ser un arreglo de valores de R,G,B)
'background'=>255, (valor de brillo, puede ser un arreglo de valores de R,G,B)
'draw'=>0 (valor de brillo, puede ser un arreglo de valores de R,G,B)
'widths' (sin definir al inicio)






Uso de xzypdf

La clase debe inicializarse como FPDF, indicando orientación, unidad de medida y tamaño de papel, seguido de otros métodos ancestros como agregar páginas según corresponda.

Luego se cargan los atributos iniciales, siendo los principales:

Al escribir texto con _cell, tenga presente que las filas y columnas comienzan en cero. El atributo cols define cuántas columnas abarca la celda (de izquierda a derecha) y rows define cuántas filas abarca (de arriba hacia abajo).

Si se va a autoimprimir el documento, se debe condicionar la llamada al método AutoPrint; tener en claro que el parámetro (true o false) determina si se mostrará el diálogo de imprimir o no, estar atento.

Al finalizar, llamar al método Output pasando el nombre preferido del reader y el destino (que para la Web será principalmente “I” (ver doc. De Output).




<?php
$autoprint = false;
$gris = 216; //negro = 0, blanco = 255 (colores rgb o de pantalla)
$orientacion = 'L'; //(Landscape, Portrait)
$unid = 'mm';
$formato = 'A4';
$autopage = false;
$breaklimit = 10;
$linewidth = 0.2; (en unid. del documento, en este caso mm)
$title = 'doc 1';
$filename = 'lista.pdf';
$outputstyle = 'I';
$anchoscol = array(40,80,30,40,30,30,30);

$estilos1 = array(
'iniciales'=>array('top'=>8,'left'=>8,'border'=>1,'height'=>4.37,'size'=>'8'),
'encabezado'=>array('border'=>1,'style'=>'B','size'=>'8'),
'centrado'=>array('align'=>'C'),
'filas'=>array('border'=>'LR','style'=>'','clip'=>true),
'ultima'=>array('border'=>'LRB','style'=>'','clip'=>true)
);

//----------------------------------------------------------------------------

$pdf = new xzypdf($orientacion,$unid,$formato); //apaisado, milimetros, papel A4
$pdf->SetAutoPageBreak($autopage,$breaklimit);
$pdf->AddPage();
$pdf->setvars(array('widths'=>$anchoscol,'background'=>$gris));
$pdf->setvars($estilos1['iniciales']);
$pdf->SetLineWidth($linewidth); //integrar pronto a xzypdf

//////////////////////
//ponga su código aquí
//////////////////////
$pdf->_cell(' ',array('row'=>13,'col'=>4,'cols'=>4,'rows'=>2));
$pdf->setvars('cols'=>1,'rows'=>1);
$pdf->_cell('3-May-2011',array('row'=>41,'col'=>4));
$pdf->_cell('06:00 p.m.',array('col'=>5));
$pdf->_cell('3-May-2011',array('row'=>42,'col'=>4));
$pdf->_cell('06:00 p.m.',array('col'=>5));
$pdf->_cell('3-May-2011',array('row'=>43,'col'=>4));
$pdf->_cell('06:00 p.m.',array('col'=>5));

if ($autoprint) {
$pdf->AutoPrint(true);
}
$pdf->setTitle($title);
$pdf->AliasNbPages();
$pdf->Output($filename,$outputstyle);
?>






Por hacer


Enlaces

1. FPDF - Sitio Oficial

2. Firebug – Sitio Oficial

3. Xzypdf en Phpclasses.org

4. FPDF - JavaScript support y autoimpresión



Por Luis Martínez Ulloa (lmartinez at ecol0gic-peru d0t c0m) 1210050611