The online documentation is produced by a web publishing technology created by us to read the documents origins in OpenOffice Writer (ODT) and Microsoft Word (docx) formats and produces native web and PDF versions. In this way we maintain Louder project documentation update and in sync on each of its formats.
El objetivo del componente PDFDocument es la generación de documentos PDF. Está basado en la estable librería FPDF pero adaptado y mejorado para ser integrado como parte del framework y hacerlo parte de su "garantía".
Las mejoras con respecto a FPDF son:
Soporte para múltiples charsets ISO8859-1, UTF-8, etc.
Facilidades para definir colores y estilos
Sintaxis y API más regular acorde al estándar del framework
Crear un documento PDF
Un documento PDF se crea instanciando la clase PdfDocument. En el siguiente ejemplo se crea agrega una página con un texto y se envia al navegador.
Ejemplo: Crear un documento PDF con PDFDocument
<?php
class ReportsController extends ApplicationController {
public function showAction(){
$pdf = new PdfDocument();
$pdf->addPage();
$black = PdfColor::fromName(PdfColor::COLOR_BLACK);
$pdf->setTextColor($black);
$pdf->setFont('helvetica', '', 18);
$pdf->writeCell(40, 10, "Hello PDF");
$pdf->outputToBrowser();
}
}
Agregar una tabla al documento
PdfDocument proporciona soporte para celdas y multi-celdas las cuales son útiles cuando se crean documentos que van a visualizar tablas de datos. En el siguiente ejemplo se genera un documento PDF con los datos obtenidos de un modelo:
Ejemplo: Crear una tabla con datos en un documento PDF
<?php
class ReportsController extends ApplicationController {
public function showAction(){
$pdf = new PdfDocument();
$pdf->addPage();
$black = PdfColor::fromName(PdfColor::COLOR_BLACK);
$pdf->setTextColor($black);
//Agregar el titulo
$pdf->setFont('helvetica', '', 18);
$pdf->writeCell(40, 7, "Reporte de Productos");
$pdf->lineFeed();
//La fecha del reporte
$pdf->setFont('helvetica', '', 12);
$pdf->writeCell(40, 7, "Fecha: ".Date::getCurrentDate());
$pdf->lineFeed();
foreach($this->Products->find('order: id') as $product){
$pdf->writeCell(20, 7, $product->getId());
$pdf->writeCell(70, 7, $product->getName());
$pdf->lineFeed();
}
$pdf->outputToBrowser();
}
}
Una versión más estilizada del reporte/listado se puede obtener agregando bordes, encabezados y colores de fondo al documento:
Ejemplo: Crear un documento PDF con una tabla de datos más estilizada
<?php
class ReportsController extends ApplicationController {
public function showAction(){
$pdf = new PdfDocument();
$pdf->addPage();
//Los datos de entrada son UTF-8
$pdf->setEncoding(PdfDocument::ENC_UTF8);
$black = PdfColor::fromName(PdfColor::COLOR_BLACK);
$pdf->setTextColor($black);
//Agregar el titulo
$pdf->setFont('helvetica', '', 18);
$pdf->writeCell(40, 7, "Reporte de Productos");
$pdf->lineFeed();
//La fecha del reporte
$pdf->setFont('helvetica', '', 12);
$pdf->writeCell(40, 7, "Fecha: ".Date::getCurrentDate());
$pdf->lineFeed();
//Encabezados con fondo gris
$lightGray = PdfColor::fromGrayScale(0.75);
$pdf->setFillColor($lightGray);
$pdf->writeCell(20, 7, 'Código', 1, 0, PdfDocument::ALIGN_JUSTIFY, 1);
$pdf->writeCell(90, 7, 'Nombre', 1, 0, PdfDocument::ALIGN_JUSTIFY, 1);
$pdf->lineFeed();
//Volver al fondo blanco
$white = PdfColor::fromName(PdfColor::COLOR_WHITE);
$pdf->setFillColor($white);
foreach($this->Products->find('order: id') as $product){
$pdf->writeCell(20, 7, $product->getId(), 1, 0,
PdfDocument::ALIGN_JUSTIFY, 1);
$pdf->writeCell(70, 7, $product->getName(), 1, 0, PdfDocument::ALIGN_JUSTIFY, 1););
$pdf->lineFeed();
}
//Se envia el listado al navegador
$pdf->outputToBrowser();
}
}
Tipos de Papel Soportados
PdfDocument soporta los siguientes tipos de papel:
Tabla: Tipos de papel soportados por PdfDocument
Constante Tipo Papel
Descripción
PAPER_A3
Tipo de papel A3
PAPER_A4
Tipo de papel A4
PAPER_A5
Tipo de papel A5
PAPER_LEGAL
Tipo de papel oficio
PAPER_LETTER
Tipo de papel carta
API de PdfDocument
function void __construct($orientation=self::ORI_PORTRAIT, $unit=self::UNIT_MM, $format=self::PAPER_A4) Es el constructor de PdfDocument. Por defecto se establece orientación vertical, medidas en milimetros y papel tipo A4.
public function setEncoding($encoding) Establece la codificación del texto de entrada a métodos como writeCell, writeText y writeMultiCell.
Las codificaciones soportadas son:
Tabla: Tipos de codificaciones soportadas por PdfDocument
Constante Codificación
Descripción
ENC_ISO88591
Codificación ISO-8859-1 ó latin occidental.
ENC_UTF8
Codificación Unicode UTF-8
ENC_ISO8022JP
Codificación Japonesa ISO-8022-JP
function void setDebug(boolean $debug) Establece si el documento se genera en modo debug ó no. Por defecto es false. Si se envia el documento al navegador en modo debug se visualiza el formato interno del documento PDF.
function void setMargins(integer $left, integer $top, integer $right=-1) Permite establecer las margenes del documento PDF. El primer parámetro es la margen izquierda, el segundo la superior y el tercero la derecha. Si no se indica el tercer parámetro la margen derecha queda igual a la izquierda.
function void setLeftMargin(integer $margin) Establece la margen izquierda del documento PDF.
function void setTopMargin(integer $margin) Establece la margen superior del documento PDF.
function void setRightMargin(integer $margin) Establece la margen derecha del documento PDF.
function void setAutoPageBreak(boolean $auto, integer $margin=0) Establece si se debe agregar una página automáticamente cuando se exceda el limite inferior al ir agregando registros. El parámetro $margin permite establecer la margen inferior donde se excede el limite de cada página. El comportamiento por defecto es que se haga el salto de página automáticamente. function void setDisplayMode(int $zoom, string $layout=1) Permite establecer el tipo de visualización del documento que el software de visualización debe tomar por defecto. Los posibles valores son constantes de la clase PdfDocument:
Tabla: Tipos de zoom en documentos PDF
Constante Zoom
Descripción
LAYOUT_DEFAULT
Es el tipo de zoom por defecto que tenga el software de visualización utilizado par ver el documento PDF.
LAYOUT_CONTINUOUS
Indica que no se debe ver el páginado sino que una página se visualiza una tras otra como si estuvieran unidas.
LAYOUT_SINGLE
Indica que se debe visualizar una página completa a la vez
LAYOUT_TWO
Indica que se debe visualizar dos páginas completas a la vez.
function void setCompression(boolean $compress) Indica si el documento PDF debe ser comprimido para reducir su tamaño final. Para usar la opción de compresión es necesario que la extensión de php llamada zlib esté habilitada.
function void setTitle(string $title) Establece el titulo del documento PDF.
function void setSubject(string $subject) Establece el asunto del documento PDF.
function void setAuthor(string $author) Establece el autor del documento PDF.
function void setKeywords(string $keywords) Establece las palabras clave del documento PDF.
function void setCreator(string $creator) Establece el creador del documento PDF.
function void aliasNbPages(string $alias='{nb}') Establece la cadena utilizada para reemplazar el número de página total de un documento PDF en encabezados y pie de página.
function void open() Abre el documento PDF. Es necesario hacer el llamado a este método para inicializar el documento.
function void close() Cierra el documento PDF.
function void addPage(int $orientation=PdfDocument::OR_PORTRAIT) Agrega una página al documento PDF. La orientación por defecto es vertical. Las posibles orientaciones son:
Tabla: Tipos de orientación de página soportadas por PdfDocument
Constante Orientación
Descripción
OR_PORTRAIT
Orientación vertical.
OR_LANDSCAPE
Orientación horizontal.
Es posible utilizar diferentes orientaciones en un mismo documento PDF.
function integer getPageNumber() Obtiene el número de página actual.
function void setDrawColor(integer $red, integer $green=-1, integer $blue=-1) function void setDrawColor(PdfColor $color) Establece el color con el que se dibujarán las lineas y bordes del documento. Este método recibe 3 parámetros que corresponden a los niveles RGB del color deseado. Cada nivel es un entero entre 0 y 255. Adicionalmente puede recibir un objeto PdfColor con el color a establecer. Si no se indican valores para $green y $blue se utiliza el valor definido en $red para estos.
function void checkTTF(string $file) Consulta si un archivo de fuente TrueType permite ser embebido en documentos PDF. function void setFillColor(integer $red, integer $green=-1, integer $blue=-1) function void setFillColor(PdfColor $color) Establece el color con el que se hará el relleno de cuadros y celdas del documento. Este método recibe 3 parámetros que corresponden a los niveles RGB del color deseado. Cada nivel es un entero entre 0 y 255. Adicionalmente puede recibir un objeto PdfColor con el color a establecer. Si no se indican valores para $green y $blue se utiliza el valor definido en $red para estos.
function void setTextColor(integer $red, integer $green=-1, integer $blue=-1) function void setFillColor(PdfColor $color) Establece el color de los textos del documento. Este método recibe 3 parámetros que corresponden a los niveles RGB del color deseado. Cada nivel es un entero entre 0 y 255. Adicionalmente puede recibir un objeto PdfColor con el color a establecer. Si no se indican valores para $green y $blue se utiliza el valor definido en $red para estos. function double getStringWidth(string $s) Permite obtener el tamaño de una cadena de carácteres de acuerdo a la fuente activa en el documento.
function void setLineWidth(integer $width) Establece el ancho de línea de la página activa del documento.
function void drawLine(integer $x1, integer $y1, integer $x2, integer $y2) Permite dibujar una línea recta en la página activa del documento.
function void drawRect(integer $x, integer $y, integer $w, integer $h, string $style='') Permite dibujar un cuadrado ó rectángulo en la página activa del documento.
function void addFont(string $family, string $style='', string $file='') Agrega una fuente que no haga parte de las fuentes core. Las fuentes core son: Helvetica, arial, times, symbol y zapfdingbats.
function void setFont(string $family, string $style='', integer $size=0) Establece la fuente activa en el documento. Si es una fuente core puede ser: Helvetica, arial, times, symbol y zapfdingbats. Si es una fuente agregada con addFont se debe utilizar el mismo nombre para $family utilizado en ella.
function void setFontSize(integer $size) Establece el tamaño de la fuente activa en puntos (pt).
function void link(integer $x, integer $y, integer $width, integer $height, string $link) Agrega un enlace al documento PDF en las posiciones indicadas.
function void writeText(integer $x, integer $y, string $txt) Agrega un texto al documento PDF en las posiciones indicadas.
function boolean acceptPageBreak() Indica si el documento tiene el salto automático de página al superar la margen inferior de una página.
function void writeCell(integer $w, integer $h=0, string $txt='', integer $border=0, integer $ln=0, string $align='', integer $fill=0, string $link='') Dibuja una celda en el documento PDF con los parámetros definidos. El parámetro $w indica el ancho de la celda, $h es el alto, $txt es el texto, $border puede ser 1 ó 0 e indica si la celda debe tener un borde visible, $ln puede ser 1 ó 0 e indica si el contenido de la celda es un enlace, $fill puede ser 1 ó 0 e indica si la celda debe ser coloreada, $link es el enlace y aplica solo cuando $ln es 1.
function void lineFeed(string $h='') Realiza un salto de línea en el documento aumentando la coordenada "y" y reiniciando "x" al valor del margen izquierdo. El tamaño opcional del salto de línea puede indicarse con $h.
function integer getX() Devuelve el valor de la coordenada en "x" (horizontal) donde se producirá la siguiente renderización de texto ó figuras del documento.
function void setX(integer $x) Establece la coordenada en "x" (horizontal) donde se producirá la siguiente renderización de texto ó figuras del documento.
function float getY() Devuelve el valor de la coordenada en "y" (vertical) donde se producirá la siguiente renderización de texto ó figuras del documento.
function void setY(integer $y) Establece la coordenada en "y" (vertical) donde se producirá la siguiente renderización de texto ó figuras del documento.
function void setXY(integer $x, integer $y) Establece simultaneamente las coordenadas en "y" (vertical) y "x" (horizontal) donde se producirá la siguiente renderización de texto ó figuras del documento.
function string outputDocument(string $name='', string $dest='')
function string outputToBrowser() Envia el reporte directamente al navegador. El desarrollador debe cerciorarse que otros contenidos no sean enviados junto con la salida ya que esto generará una excepción.