Previous Next

Dibujo

Geometría

PDF utiliza la misma geometría que PostScript. Se inicia desde la parte inferior izquierda de la página y por defecto se mide en puntos (1/72 de pulgada).

El tamaño de la página se puede recuperar desde un objeto página:

$width  = $pdfPage->getWidth();
$height = $pdfPage->getHeight();

Colores

PDF tiene una poderosa capacidad de representación de colores. El módulo Zend_Pdf soporta la Escala de Grises, y los espacios de color RGB y CMYK. Cualquiera de ellos puede ser usado en cualquier lugar, donde el objeto Zend_Pdf_Color sea requerido. Las clases Zend_Pdf_Color_GrayScale , Zend_Pdf_Color_Rgb y Zend_Pdf_Color_Cmyk proporcionan esta funcionalidad:

// $grayLevel (float number). 0.0 (black) - 1.0 (white)
$color1 = new Zend_Pdf_Color_GrayScale($grayLevel);

// $r, $g, $b (float numbers). 0.0 (min intensity) - 1.0 (max intensity)
$color2 = new Zend_Pdf_Color_Rgb($r, $g, $b);

// $c, $m, $y, $k (float numbers). 0.0 (min intensity) - 1.0 (max intensity)
$color3 = new Zend_Pdf_Color_Cmyk($c, $m, $y, $k);

Los estilos de colores HTML también se proporcionan con la clase Zend_Pdf_Color_Html :

$color1 = new Zend_Pdf_Color_Html('#3366FF');
$color2 = new Zend_Pdf_Color_Html('silver');
$color3 = new Zend_Pdf_Color_Html('forestgreen');

Dibujo de Formas

Todas las operaciones de dibujo se puede hacer en un contexto de página PDF .

La clase Zend_Pdf_Page proporciona un conjunto de primitivas de dibujo:

/**
 * Dibujar una línea desde x1,y1 hasta x2,y2.
 *
 * @param float $x1
 * @param float $y1
 * @param float $x2
 * @param float $y2
 * @return Zend_Pdf_Page
 */
public function drawLine($x1, $y1, $x2, $y2);
/**
 * Dibujar un rectángulo.
 *
 * Rellenar los tipos:
 * Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - rellenar el rectángulo
 *                                             y delinearlo (por defecto)
 * Zend_Pdf_Page::SHAPE_DRAW_STROKE          - delinear el rectángulo
 * Zend_Pdf_Page::SHAPE_DRAW_FILL            - rellenar el rectángulo
 *
 * @param float $x1
 * @param float $y1
 * @param float $x2
 * @param float $y2
 * @param integer $fillType
 * @return Zend_Pdf_Page
 */
public function drawRectangle($x1, $y1, $x2, $y2,
                    $fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE);
/**
 * Dibujar un polígono.
 *
 * Si $fillType es Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE o
 * Zend_Pdf_Page::SHAPE_DRAW_FILL, entonces el polígono se cierra automáticamente.
 * Véase la descripción detallada de estos métodos en la documentación de PDF
 * (sección 4.4.2 Path painting Operators, Filling)
 *
 * @param array $x  - array de float (la coordenada X de los vértices)
 * @param array $y  - array de float (la coordenada Y de los vértices)
 * @param integer $fillType
 * @param integer $fillMethod
 * @return Zend_Pdf_Page
 */
public function drawPolygon($x, $y,
                            $fillType =
                                Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE,
                            $fillMethod =
                                Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING);
/**
 * Dibujar un círculo centrado en X, y con un radio de radius.
 *
 * Los ángulos están especificados en radianes.
 *
 * Firmas del Método::
 * drawCircle($x, $y, $radius);
 * drawCircle($x, $y, $radius, $fillType);
 * drawCircle($x, $y, $radius, $startAngle, $endAngle);
 * drawCircle($x, $y, $radius, $startAngle, $endAngle, $fillType);
 *
 *
 * No es un círculo de verdad, porque PDF sólo admite curvas cúbicss de Bezier,
 * pero con muy buena aproximación.
 * Se distingue de un verdadero círculo en un máximo de 0.00026 radios (en PI/8,
 * 3*PI/8, 5*PI/8, 7*PI/8, 9*PI/8, 11*PI/8, 13*PI/8 y 15*PI/8 ángulos).
 * A 0, PI/4, PI/2, 3*PI/4, PI, 5*PI/4, 3*PI/2 y 7*PI/4 es exactamente
 * la tangente a un círculo.
 *
 * @param float $x
 * @param float $y
 * @param float $radius
 * @param mixed $param4
 * @param mixed $param5
 * @param mixed $param6
 * @return Zend_Pdf_Page
 */
public function  drawCircle($x,
                            $y,
                            $radius,
                            $param4 = null,
                            $param5 = null,
                            $param6 = null);
/**
 * Dibujar una elipse dentro del rectángulo especificado.
 *
 * Firmas del método:
 * drawEllipse($x1, $y1, $x2, $y2);
 * drawEllipse($x1, $y1, $x2, $y2, $fillType);
 * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
 * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle, $fillType);
 *
 * Los ángulos se especifican en radianes
 *
 * @param float $x1
 * @param float $y1
 * @param float $x2
 * @param float $y2
 * @param mixed $param5
 * @param mixed $param6
 * @param mixed $param7
 * @return Zend_Pdf_Page
 */
public function drawEllipse($x1,
                            $y1,
                            $x2,
                            $y2,
                            $param5 = null,
                            $param6 = null,
                            $param7 = null);

Dibujo de Texto

Las operaciones de dibujo de texto también existen en el contexto de una página PDF . Puede dibujar una sola línea de texto en cualquier posición en la página mediante el suministro de las coordenadas X e Y de la base de referencia. La fuente y tamaño actual de la letra se utilizan para operaciones de dibujo de texto (ver descripción detallada más abajo).

/**
 * Dibujar una línea de texto en una posición específica.
 *
 * @param string $text
 * @param float $x
 * @param float $y
 * @param string $charEncoding (opcional) Codificación de caracteres del texto
 * fuente. El valor por defecto es la codificación actual y local.
 * @throws Zend_Pdf_Exception
 * @return Zend_Pdf_Page
 */
public function drawText($text, $x, $y, $charEncoding = '');

Ejemplo #1 Dibujar un string en la página

...
$pdfPage->drawText('Hello world!', 72, 720);
...

Por defecto, los strings de texto se interpretan usando el método de codificación de la localización actual. Si tiene un string que utiliza un método de codificación diferente (como un string UTF-8 a leer desde un archivo en disco, o un string MacRoman obtenido a partir del legado de una base de datos), puede indicar la codificación de caracteres a llamar en tiempo de dibujo y Zend_Pdf se encargará de la conversión. Puede proporcionar la fuente de cualquier método de codificación de strings soportados por la función de PHP » iconv() :

Ejemplo #2 Dibujar un string codificado en UTF-8 en la página

...
// Leer del disco un string codificado en UTF-8
$unicodeString = fread($fp, 1024);

// Dibujar un string en la página
$pdfPage->drawText($unicodeString, 72, 720, 'UTF-8');
...

Uso de Fuentes

Zend_Pdf_Page::drawText() utiliza la fuente y el tamaño actual de la fuente de la página, que se establece con el método Zend_Pdf_Page::setFont() :

/**
 * Establecer la fuente actual.
 *
 * @param Zend_Pdf_Resource_Font $font
 * @param float $fontSize
 * @return Zend_Pdf_Page
 */
public function setFont(Zend_Pdf_Resource_Font $font, $fontSize);

Los documentos PDF soportan fuentes PostScript Type 1 y TrueType, así como dos tipos especializados de PDF , Type 3 y fuentes compuestas. También hay 14 fuentes estándar Tipo 1 incorporadas para cada visor PDF : Courier (4 estilos), Helvetica (4 estilos), Times (4 estilos), Symbol y Zapf Dingbats.

Zend_Pdf actualmente soporta el estándar de 14 fuentes PDF , así como sus propias fuentes personalizadas TrueType. Los objetos Font se obtienen a través de una de los dos métodos de fábrica: Zend_Pdf_Font::fontWithName($fontName) para las 14 fuentes estándar PDF o Zend_Pdf_Font::fontWithPath($filePath) para fuentes personalizadas.

Ejemplo #3 Crear un tipo de letra normal

...
// Crear una fuente nueva
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);

// Aplicar la fuente
$pdfPage->setFont($font, 36);
...

Los nombres de las 14 constantes para el tipo de letra estándar de PDF se definen en la clase Zend_Pdf_Font :

  • Zend_Pdf_Font::FONT_COURIER

  • Zend_Pdf_Font::FONT_COURIER_BOLD

  • Zend_Pdf_Font::FONT_COURIER_ITALIC

  • Zend_Pdf_Font::FONT_COURIER_BOLD_ITALIC

  • Zend_Pdf_Font::FONT_TIMES

  • Zend_Pdf_Font::FONT_TIMES_BOLD

  • Zend_Pdf_Font::FONT_TIMES_ITALIC

  • Zend_Pdf_Font::FONT_TIMES_BOLD_ITALIC

  • Zend_Pdf_Font::FONT_HELVETICA

  • Zend_Pdf_Font::FONT_HELVETICA_BOLD

  • Zend_Pdf_Font::FONT_HELVETICA_ITALIC

  • Zend_Pdf_Font::FONT_HELVETICA_BOLD_ITALIC

  • Zend_Pdf_Font::FONT_SYMBOL

  • Zend_Pdf_Font::FONT_ZAPFDINGBATS

También puede utilizar cualquier fuente individual TrueType (que generalmente tiene una extensión '.ttf') o bien una fuente OpenType (con la extensión '.otf') si contiene esquemas TrueType. Actualmente no están soportadas, pero está previsto para una versión futura archivos de fuentes .dfont de Mac OS X y de Microsoft TrueType Collection(extensión '.ttc').

Para utilizar una fuente TrueType, debe proporcionar toda la ruta del archivo a la fuente del programa. Si la fuente no se puede leer por alguna razón, o si no es una fuente TrueType, el método de fábrica arrojará una excepción:

Ejemplo #4 Crear una fuente TrueType

...
// Crear una nueva fuente
$goodDogCoolFont = Zend_Pdf_Font::fontWithPath('/path/to/GOODDC__.TTF');

// Aplicar la fuente
$pdfPage->setFont($goodDogCoolFont, 36);
...

Por defecto, las fuentes personalizadas serán incorporados en el documento PDF resultante. Esto permite que los destinatarios vean la página como está previsto, incluso si no tienen los tipos de letra apropiados instalados en su sistema. Si le preocupa el tamaño del archivo, puede pedir que la fuente del programa no sea integrada pasando una opción 'do not embed' ("no incluir") al método de fábrica:

Ejemplo #5 Crear una fuente TrueType, pero no incluirla en el documento PDF

...
// Crear una nueva fuente
$goodDogCoolFont = Zend_Pdf_Font::fontWithPath('/path/to/GOODDC__.TTF',
                                               Zend_Pdf_Font::EMBED_DONT_EMBED);

// Aplicar la fuente
$pdfPage->setFont($goodDogCoolFont, 36);
...

Si el programa no es de fuentes incrustadas, pero el destinatario del archivo PDF tiene instalada la fuente en su sistema, va a ver el documento como estaba previsto. Si no tiene la fuente correcta instalada, la aplicación del visor de PDF hará todo lo posible para sintetizar un sustituto.

Algunas fuentes tienen normas específicas de concesión de licencias que les impiden ser tenidas en cuenta en documentos PDF . Así que no son capturados con la "guardia baja" por la presente, si intenta utilizar una fuente que no puede ser incorporada, el método de fábrica lanzará una excepción.

Puede seguir utilizando esas fuentes, pero debe pasar el flag de no incluir como se ha descripto anteriormente, o simplemente puede suprimir la excepción:

Ejemplo #6 No arrojar una excepción para las fuentes que no puedan ser incorporadas

...
$font = Zend_Pdf_Font::fontWithPath(
           '/path/to/unEmbeddableFont.ttf',
           Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION
        );
...

Esta técnica de supresión se prefiere si va a permitir a un usuario final a elegir sus propios tipos de letra. Las fuentes que puedan ser embebidas en el documento PDF , lo harán, aquellos que no puedan, no.

Los de programas de fuentes pueden ser bastante grandes, algunas llegan a decenas de megabytes. Por defecto, todas las fuentes incorporadas son comprimidas utilizando el esquema de compresión Flate, lo que resulta en un ahorro de espacio del 50% en promedio. Si, por alguna razón, no desea comprimir la fuente del programa, se puede desactivar con una opción:

Ejemplo #7 No comprimir una fuente incrustada

...
$font = Zend_Pdf_Font::fontWithPath('/path/to/someReallyBigFont.ttf',
                                    Zend_Pdf_Font::EMBED_DONT_COMPRESS);
...

Por último, en caso necesario, puede combinar las opciones de la integración mediante el operador binario OR:

Ejemplo #8 La combinación de opciones de la incrustación de fuentes

...
$font = Zend_Pdf_Font::fontWithPath(
            $someUserSelectedFontPath,
            (Zend_Pdf_Font::EMBED_SUPPRESS_EMBED_EXCEPTION |
            Zend_Pdf_Font::EMBED_DONT_COMPRESS));
...

Limitaciones de las fuentes PDF estándar

Las fuentes estándar PDF utilizan internamente varias codificaciones de un solo byte (véase »  PDF Reference, Sixth Edition, version 1.7 Apéndice D para más detalles). Son, en general, igual al conjunto de caracteres Latin1 (excepto las fuentes ZapfDingbats y Symbol).

Zend_Pdf usa CP1252 (WinLatin1) para dibujar el texto con las fuentes estándar.

El texto todavía se puede proporcionar en cualquier otra codificación, que debe ser especificada si ésta es distinto de una fuente local actual. Realmente, sólo se dibujarán caracteres WinLatin1.

Ejemplo #9 Combinación de opciones de la incrustación de fuentes

...
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_COURIER);
$pdfPage->setFont($font, 36)
        ->drawText('Euro sign - €', 72, 720, 'UTF-8')
        ->drawText('Text with umlauts - à è ì', 72, 650, 'UTF-8');
...

Extracción de las fuentes

El módulo Zend_Pdf proporciona una posibilidad de extraer las fuentes de los documentos cargados.

Puede ser útil para las actualizaciones incrementales de un documento. Sin esta funcionalidad tiene que agregar y posiblemente, incrustar una fuente en un documento cada vez que desee actualizarlo.

Los objetos Zend_Pdf y Zend_Pdf_Page proporcionan métodos especiales para extraer todas las fuentes mencionadas en un documento o una página:

Ejemplo #10 Extracción de las fuentes de un documento cargado

...
$pdf = Zend_Pdf::load($documentPath);
...
// Obtener todas las fuentes del documento
$fontList = $pdf->extractFonts();
$pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));
$yPosition = 700;
foreach ($fontList as $font) {
    $page->setFont($font, 15);
    $fontName = $font->getFontName(Zend_Pdf_Font::NAME_POSTSCRIPT,
                                   'en',
                                   'UTF-8');
    $page->drawText($fontName . ': The quick brown fox jumps over the lazy dog',
                    100,
                    $yPosition,
                    'UTF-8');
    $yPosition -= 30;
}
...
// Obtener las fuentes referenciadas dentro de la primera página del documento
$firstPage = reset($pdf->pages);
$firstPageFonts = $firstPage->extractFonts();
...

Ejemplo #11 Extracción de la fuente de un documento cargado especificando el nombre de la fuente

...
$pdf = new Zend_Pdf();
...
$pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));

$font = Zend_Pdf_Font::fontWithPath($fontPath);
$page->setFont($font, $fontSize);
$page->drawText($text, $x, $y);
...
// Este nombre de fuente debe ser almacenado en algún lugar...
$fontName = $font->getFontName(Zend_Pdf_Font::NAME_POSTSCRIPT,
                               'en',
                               'UTF-8');
...
$pdf->save($docPath);
...
...
$pdf = Zend_Pdf::load($docPath);
...
$pdf->pages[] = ($page = $pdf->newPage(Zend_Pdf_Page::SIZE_A4));

/* $srcPage->extractFont($fontName) también se puede usar aquí */
$font = $pdf->extractFont($fontName);

$page->setFont($font, $fontSize);
$page->drawText($text, $x, $y);
...
$pdf->save($docPath, true /* modo de actualización incremental */);
...

Las fuentes extraídas pueden ser utilizadas en el lugar de cualquier otra fuente con las siguientes limitaciones:

  • La fuente extraída puede ser usada sólo en el contexto del documento del que se ha extraído.

  • Posiblemente, el programa no extraiga realmente la fuente incrustada. Así que las fuentes extraídas no pueden proporcionar métricas correctas y la fuente original tiene que ser utilizada para los cálculos de ancho de texto:

    ...
    $font = $pdf->extractFont($fontName);
    $originalFont = Zend_Pdf_Font::fontWithPath($fontPath);
    
    $page->setFont($font /* usar la fuente extraída para dibujar */, $fontSize);
    $xPosition = $x;
    for ($charIndex = 0; $charIndex < strlen($text); $charIndex++) {
        $page->drawText($text[$charIndex], xPosition, $y);
    
        // Usar la fuente original para calcular el ancho del texto
        $width = $originalFont->widthForGlyph(
                     $originalFont->glyphNumberForCharacter($text[$charIndex])
                 );
        $xPosition += $width/$originalFont->getUnitsPerEm()*$fontSize;
    }
    ...

Dibujo de Imágenes

La clase Zend_Pdf_Page proporciona el método drawImage() para dibujar la imagen:

/**
 * Dibujar una imagen en una posición específica de la página.
 *
 * @param Zend_Pdf_Resource_Image $image
 * @param float $x1
 * @param float $y1
 * @param float $x2
 * @param float $y2
 * @return Zend_Pdf_Page
 */
public function drawImage(Zend_Pdf_Resource_Image $image, $x1, $y1, $x2, $y2);

Los objetos imagen deben ser creados con el método Zend_Pdf_Image::imageWithPath($filePath) (imágenes JPG, PNG y TIFF ahora son soportadas):

Ejemplo #12 Dibujar una imagen

...
// Cargar la imagen
$image = Zend_Pdf_Image::imageWithPath('my_image.jpg');

$pdfPage->drawImage($image, 100, 100, 400, 300);
...

Importante! el soporte a JPEG requiere que se configure la extensión PHP GD. Importante! el soporte a PNG requiere que se configure la extensión ZLIB para trabajar con imágenes canal Alfa.

Consulte la documentación de PHP para obtener información detallada ( » http://www.php.net/manual/en/ref.image.php ). ( » http://www.php.net/manual/en/ref.zlib.php ).

Estilo de Dibujo de Líneas

El estilo del dibujo de líneas está definido por el ancho de línea, el color de línea y el patrón del tipo de línea. Todo esto parámetros pueden ser asignados por los métodos de la clase Zend_Pdf_Page :

/** Establecer el color de la línea. */
public function setLineColor(Zend_Pdf_Color $color);

/** Establecer el ancho de la línea. */
public function setLineWidth(float $width);

/**
 * Establecer el patrón de líneas de guiones.
 *
 * El patrón es una array de números de punto flotante:
 *     array(on_length, off_length, on_length, off_length, ...)
 * La fase está desplazada lateralmente desde el comienzo de la línea.
 *
 * @param array $pattern
 * @param array $phase
 * @return Zend_Pdf_Page
 */
public function setLineDashingPattern($pattern, $phase = 0);

Estilo Relleno

Los métodos Zend_Pdf_Page::drawRectangle() , Zend_Pdf_Page::drawPolygon() , Zend_Pdf_Page::drawCircle() y Zend_Pdf_Page::drawEllipse() toman el argumento $fillType como un parámetro opcional. Puede ser:

  • Zend_Pdf_Page::SHAPE_DRAW_STROKE - forma del trazo

  • Zend_Pdf_Page::SHAPE_DRAW_FILL - sólo llenar la forma

  • Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - llenar y trazar (comportamiento por defecto)

El método Zend_Pdf_Page::drawPolygon() también tiene un parámetro adicional $fillMethod :

  • Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING (comportamiento por defecto)

    PDF reference esta norma se describe como sigue:

    La tortuosa regla del número distinto de cero determina si un punto está dentro de un camino de un rayo conceptual dibujado a partir de ese punto hasta el infinito en cualquier dirección y luego de examinar los lugares en los que un segmento de la ruta atraviesa el rayo. A partir de la cuenta de 0, la norma agrega 1 cada vez que un segmento de ruta atraviesa el rayo de izquierda a derecha y resta 1 cada vez que un segmento cruza de derecha a izquierda. Después de contar todos los cruces, si el resultado es 0, entonces el punto está fuera del camino; otra cosa es el interior. Nota: El método que acabamos de describir no especifica qué hacer si un segmento de ruta coincide con o es tangente al rayo elegido. Dado que la dirección de los rayos es arbitraria, la regla simplemente elige un rayo que no encuentre problemas con las intersecciones. Por simples caminos convexos, la regla del tortuoso número distinto de cero define el dentro y afuera como uno lo espera intuitivamente. Los casos más interesantes son aquellos que involucran la complejidad o las rutas auto-intersectadas como las que se muestran en la Figura 4.10 (en un PDF de referencia). Para un camino que consiste en una estrella de cinco puntas, dibujado con cinco segmentos conectados de líneas rectas intersectándose entre sí, la regla considera que el interior será toda el área delimitada por la estrella, incluido el pentágono en el centro. Para un camino compuesto por dos círculos concéntricos, las áreas de ambos círculos cerrados se consideran que están adentro, siempre que ambas se hayan dibujado en la misma dirección. Si los círculos son dibujados en direcciones opuestas, sólo la forma de "doughnut" (rosquilla) formada entre ellos es el interior, de acuerdo a la norma, el "agujero de la rosquilla" está afuera.

  • Zend_Pdf_Page::FILL_METHOD_EVEN_ODD

    PDF reference describe esta norma como sigue:

    Una alternativa al tortuoso número distinto de cero es la regla par-impar. Esta norma determina la "interioridad" de un punto por el dibujo de un rayo desde ese punto en cualquier dirección y simplemente contando el número de segmentos de ruta que atraviesan los rayos, independientemente de la dirección. Si este número es impar, el punto está adentro, si es par, el punto está afuera. Esto produce los mismos resultados que la regla del tortuoso número distinto de cero para caminos con formas simples, pero produce resultados diferentes para formas más complejas. La Figura 4.11 (en un PDF de referencia) muestra los efectos de la aplicación de la regla par-impar a las rutas complejss. Para la estrella de cinco puntas, la regla considera que los puntos del triángulo están dentro de la ruta, pero no el pentágono en el centro. Para los dos círculos concéntricos, sólo la forma de la "rosquilla" entre los dos círculo está considerada adentro, independientemente de las direcciones en las que se dibujen los círculos.

Transformaciones Lineales

Rotaciones

La página PDF se puede rotar antes de aplicar cualquier operación de dibujo. Se puede hacer con el método Zend_Pdf_Page::rotate() :

/**
 * Rotar la página.
 *
 * @param float $x  - la coordenada X del punto de rotación
 * @param float $y  - la coordenada Y del punto de rotación
 * @param float $angle - ángulo de rotación
 * @return Zend_Pdf_Page
 */
public function rotate($x, $y, $angle);

A partir de Zend Framework 1.8, el escalado

La escala de transformación es proporcionada por el método: Zend_Pdf_Page::scale() :

/**
 * Establecer la escala al sistema de coordenadas.
 *
 * @param float $xScale - factor de escala de la dimensión X
 * @param float $yScale - factor de escala de la dimensión Y
 * @return Zend_Pdf_Page
 */
public function scale($xScale, $yScale);

A partir de Zend Framework 1.8, traducir

El desplazamiento del sistema de coordenadas es realizado por el método Zend_Pdf_Page::translate() :

/**
 * Traducir sistema de coordenadas.
 *
 * @param float $xShift - desplazamiento de la coordenada X
 * @param float $yShift - desplazamiento de la coordenada Y
 * @return Zend_Pdf_Page
 */
public function translate($xShift, $yShift);

A partir de Zend Framework 1.8, el sesgo

El sesgo de una página se puede hacer utilizando el método Zend_Pdf_Page::skew() :

/**
 * Traducir sistema de coordenadas.
 *
 * @param float $x  - la coordenada X del eje del punto de sesgo
 * @param float $y  - la coordenada Y del eje del punto de sesgo
 * @param float $xAngle - ángulo de sesgo en el eje X
 * @param float $yAngle - ángulo de sesgo en el eje Y
 * @return Zend_Pdf_Page
 */
public function skew($x, $y, $xAngle, $yAngle);

Guardar/Restaurar el estado de los gráficos

En cualquier momento el estado de la página de gráficos (fuente actual, tamaño de la fuente, color de línea, color de relleno, estilo de línea, rotación de la página, clip del área) se pueden guardar y restaurarlos luego. Guardar la operación pone los datos a un estado de pila de gráficos, la operación de restauración se recupera a partir de ahí.

Existen dos métodos en la clase Zend_Pdf_Page para estas operaciones:

/**
 * Salva el estado de los gráficos de esta página.
 * Esta toma una instantánea del estilo aplicado actualmente, posición,
 * área de recorte y cualquier rotación/traducción/escalado que ha sido
 * aplicada.
 *
 * @return Zend_Pdf_Page
 */
public function saveGS();

/**
 * Restablecer los gráficos que se guardaron con la última llamada a
 * saveGS().
 *
 * @return Zend_Pdf_Page
 */
public function restoreGS();

Señalar el área de recorte

PDF y el módulo Zend_Pdf dan soporte de recorte a la zona de dibujo. La zona actual de Clip límita las regiones de la página de los operadores afectados por la pintura. En principio, es la página entera.

La clase Zend_Pdf_Page proporciona un conjunto de métodos para las operaciones de recorte.

/**
 * Intersectar el área actual de recorte con un rectángulo.
 *
 * @param float $x1
 * @param float $y1
 * @param float $x2
 * @param float $y2
 * @return Zend_Pdf_Page
 */
public function clipRectangle($x1, $y1, $x2, $y2);
/**
 * Intersectar el área actual de recorte con un polígono.
 *
 * @param array $x  - array de float (la coordenada X de los vértices)
 * @param array $y  - array de float (la coordenada Y de los vértices)
 * @param integer $fillMethod
 * @return Zend_Pdf_Page
 */
public function clipPolygon($x,
                            $y,
                            $fillMethod =
                                Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING);
/**
 * Intersectar el área actual de recorte con un círculo.
 *
 * @param float $x
 * @param float $y
 * @param float $radius
 * @param float $startAngle
 * @param float $endAngle
 * @return Zend_Pdf_Page
 */
public function clipCircle($x,
                           $y,
                           $radius,
                           $startAngle = null,
                           $endAngle = null);
/**
 * Intersectar el área actual de recorte con una elipse.
 *
 * Firmas del método:
 * drawEllipse($x1, $y1, $x2, $y2);
 * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
 *
 * @todo process special cases with $x2-$x1 == 0 or $y2-$y1 == 0
 *
 * @param float $x1
 * @param float $y1
 * @param float $x2
 * @param float $y2
 * @param float $startAngle
 * @param float $endAngle
 * @return Zend_Pdf_Page
 */
public function clipEllipse($x1,
                            $y1,
                            $x2,
                            $y2,
                            $startAngle = null,
                            $endAngle = null);

Estilos

La clase Zend_Pdf_Style proporciona la funcionalidad de los estilos.

Los estilos se pueden utilizar para almacenar un conjunto de parámetros de estado del gráfico y aplicarlo a un página PDF por una operación:

/**
 * Establecer el estilo a utilizar para futuras operaciones de dibujo sobre esta página
 *
 * @param Zend_Pdf_Style $style
 * @return Zend_Pdf_Page
 */
public function setStyle(Zend_Pdf_Style $style);

/**
 * Regresar el estilo aplicado a la página.
 *
 * @return Zend_Pdf_Style|null
 */
public function getStyle();

La clase Zend_Pdf_Style proporciona un conjunto de métodos para obtener o configurar diferentes parámetros de estado de los gráficos:

/**
 * Establecer el color de la línea.
 *
 * @param Zend_Pdf_Color $color
 * @return Zend_Pdf_Page
 */
public function setLineColor(Zend_Pdf_Color $color);
/**
 * Obtener el color de la línea.
 *
 * @return Zend_Pdf_Color|null
 */
public function getLineColor();
/**
 * Establecer el ancho de la línea.
 *
 * @param float $width
 * @return Zend_Pdf_Page
 */
public function setLineWidth($width);
/**
 * Obtener el ancho de la línea.
 *
 * @return float
 */
public function getLineWidth();
/**
 * Establecer el patrón de la línea de guiones
 *
 * @param array $pattern
 * @param float $phase
 * @return Zend_Pdf_Page
 */
public function setLineDashingPattern($pattern, $phase = 0);
/**
 * Obtener el patrón de la línea de guiones
 *
 * @return array
 */
public function getLineDashingPattern();
/**
 * Obtener la fase de la línea de guiones
 *
 * @return float
 */
public function getLineDashingPhase();
/**
 * Establecer el color de relleno.
 *
 * @param Zend_Pdf_Color $color
 * @return Zend_Pdf_Page
 */
public function setFillColor(Zend_Pdf_Color $color);
/**
 * Obtener el color de relleno.
 *
 * @return Zend_Pdf_Color|null
 */
public function getFillColor();
/**
 * Establecer la fuente actual.
 *
 * @param Zend_Pdf_Resource_Font $font
 * @param float $fontSize
 * @return Zend_Pdf_Page
 */
public function setFont(Zend_Pdf_Resource_Font $font, $fontSize);
/**
 * Modificar el tamaño de la fuente actual.
 *
 * @param float $fontSize
 * @return Zend_Pdf_Page
 */
public function setFontSize($fontSize);
/**
 * Obtener la fuente actual.
 *
 * @return Zend_Pdf_Resource_Font $font
 */
public function getFont();
/**
 * Obtener el tamaño de la fuente actual.
 *
 * @return float $fontSize
 */
public function getFontSize();

Transparencia

El módulo Zend_Pdf soporta el manejo de la transparencia.

La transparencia puede ser el método Zend_Pdf_Page::setAlpha() :

/**
 * Establecer la transparencia.
 *
 * $alpha == 0  - transparente
 * $alpha == 1  - opaco
 *
 * Modos de transparencia soportados por PDF:
 * Normal (por defecto), Multiply, Screen, Overlay, Darken, Lighten,
 * ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion
 *
 * @param float $alpha
 * @param string $mode
 * @throws Zend_Pdf_Exception
 * @return Zend_Pdf_Page
 */
public function setAlpha($alpha, $mode = 'Normal');

Previous Next
Introducción a Zend Framework
Descripción general
Instalación
Aprendiendo Zend Framework
Inicio Rápido con Zend Framework
Introducción a MVC & ZF
Create Your Project
Create A Layout
Create a Model and Database Table
Create A Form
¡Felicitaciones!
Autocarga o Carga automática en Zend Framework
Introduction
Goals and Design
Basic Autoloader Usage
Resource Autoloading
Conclusion
Plugins en Zend Framework
Introduction
Using Plugins
Conclusion
Primeros pasos con Zend_Layout
Introduction
Using Zend_Layout
Zend_Layout: Conclusions
Introducción a Zend_View Placeholders
Introduction
Basic Placeholder Usage
Standard Placeholders
View Placeholders: Conclusion
Comprensión y uso de Zend Form Decorators
Introduction
Decorator Basics
Layering Decorators
Rendering Individual Decorators
Creating and Rendering Composite Elements
Conclusión
Primeros pasos con Zend_Session, Zend_Auth, and Zend_Acl
Building Multi-User Applications With Zend Framework
Managing User Sessions In ZF
Authenticating Users in Zend Framework
Building an Authorization System in Zend Framework
Primeros pasos con Zend_Search_Lucene
Zend_Search_Lucene Introduction
Lucene Index Structure
Index Opening and Creation
Indexing
Searching
Supported queries
Search result pagination
Primeros pasos con Zend_Paginator
Introduction
Simple Examples
Pagination Control and ScrollingStyles
Putting it all Together
Referencia de Zend Framework
Zend_Acl
Introducción
Perfeccionamiento de los controles de acceso
Uso Avanzado
Zend_Amf
Introducción
Zend_Amf_Server
Zend_Application
Introducción
Inicio rápido con Zend_Application
Teoría de Operación
Ejemplos
Funcionalidad Básica
Plugins de Recursos Disponibles
Zend_Auth
Introducción
Tabla de base de datos de autenticación
Autenticación "Digest"
Adaptador de Autenticación HTTP
LDAP Authentication
Autenticación con Open ID
Zend_Barcode
Introduction
Barcode creation using Zend_Barcode class
Zend_Barcode Objects
Zend_Barcode Renderers
Zend_Cache
Introducción
The Theory of Caching
Zend_Cache Frontends
Zend_Cache Backends
The Cache Manager
Zend_Captcha
Introducción
Captcha Operation
CAPTCHA Adapters
SimpleCloud API: Zend_Cloud
Document Service Introduction
Queue Service Introduction
StorageService Introduction
Zend_CodeGenerator
Introducción
Ejemplos de Zend_CodeGenerator
Referencias de Zend_CodeGenerator
Zend_Config
Introducción
Aspectos Teóricos
Zend_Config_Ini
Zend_Config_Json
Zend_Config_Xml
Zend_Config_Yaml
Zend_Config_Writer
Zend_Config_Writer
Zend_Console_Getopt
Introduction
Declaring Getopt Rules
Fetching Options and Arguments
Configuring Zend_Console_Getopt
Zend_Controller
Inicio rápido a Zend_Controller
Conceptos Básicos de Zend_Controller
El Front Controller
La solicitud del Objeto
El Router Standard
El Despachador
Controladores de Acción
Action Helpers
The Response Object
Plugins
Using a Conventional Modular Directory Structure
Excepciones MVC
Zend_Currency
Introduction to Zend_Currency
Using Zend_Currency
Options for currencies
What makes a currency?
Where is the currency?
How does the currency look like?
How much is my currency?
Calculating with currencies
Exchanging currencies
Additional informations on Zend_Currency
Zend_Date
Introducción
Theory of Operation
Basic Methods
Zend_Date API Overview
Creation of Dates
Constants for General Date Functions
Working Examples
Zend_Db
Zend_Db_Adapter
Zend_Db_Statement
Zend_Db_Profiler
Zend_Db_Select
Zend_Db_Table
Zend_Db_Table_Row
Zend_Db_Table_Rowset
Zend_Db_Table Relationships
Zend_Db_Table_Definition
Zend_Debug
Mostrar información de variables(Dumping Variables)
Zend_Dojo
Introducción
Zend_Dojo_Data: Envolturas de dojo.data
Ayudantes de Dojo View
Elementos y Decoradores de Dojo Form
Zend_Dojo build layer support
Zend_Dom
Introducción
Zend_Dom_Query
Zend_Exception
Uso de Excepciones
Basic usage
Previous Exceptions
Zend_Feed
Introduction
Importing Feeds
Retrieving Feeds from Web Pages
Consuming an RSS Feed
Consuming an Atom Feed
Consuming a Single Atom Entry
Modifying Feed and Entry structures
Custom Feed and Entry Classes
Zend_Feed_Reader
Zend_Feed_Writer
Zend_Feed_Pubsubhubbub
Zend_File
Zend_File_Transfer
Validators for Zend_File_Transfer
Filters for Zend_File_Transfer
Zend_Filter
Introducción
Standard Filter Classes
Filter Chains
Writing Filters
Zend_Filter_Input
Zend_Filter_Inflector
Zend_Form
Zend_Form
Inicio rápido a Zend_Form
Creando elementos de formulario usando Zend_Form_Element
Creando formularios usando Zend_Form
Creando un personalizado marcado de formulario usando Zend_Form_Decorator
Elementos Enviados en el Formulario Estandard de Zend Framework
Decoradores de Formulario (Form Decorartors) estándar contenidos en Zend Framework
Internacionalización de Zend_Form
Uso avanzado de Zend_Form
Zend_Gdata
Introduction
Authenticating with AuthSub
Using the Book Search Data API
Authenticating with ClientLogin
Using Google Calendar
Using Google Documents List Data API
Using Google Health
Using Google Spreadsheets
Using Google Apps Provisioning
Using Google Base
Using Picasa Web Albums
Using the YouTube Data API
Catching Gdata Exceptions
Zend_Http
Introduction
Zend_Http_Client - Advanced Usage
Zend_Http_Client - Connection Adapters
Zend_Http_Cookie and Zend_Http_CookieJar
Zend_Http_Response
Zend_Http_UserAgent
The UserAgent Device Interface
The UserAgent Features Adapter
The WURFL UserAgent Features Adapter
The DeviceAtlas UserAgent Features Adapter
The TeraWurfl UserAgent Features Adapter
The UserAgent Storage Interface
The Session UserAgent Storage Adapter
Zend_InfoCard
Introduction
Zend_Json
Introducción
Uso Básico
Uso Avanzado de Zend_Json
Conversión de XML a JSON
Zend_Json_Server - servidor JSON-RPC
Zend_Layout
Introducción
Zend_Layout Quick Start
Zend_Layout Configuration Options
Zend_Layout Advanced Usage
Zend_Ldap
Introduction
API overview
Usage Scenarios
Tools
Object oriented access to the LDAP tree using Zend_Ldap_Node
Getting information from the LDAP server
Serializing LDAP data to and from LDIF
Zend_Loader
Cargando archivos y clases dinámicamente
The Autoloader
Resource Autoloaders
Loading Plugins
Zend_Locale
Introduction
Using Zend_Locale
Normalization and Localization
Working with Dates and Times
Supported locales
Zend_Log
Overview
Writers
Formatters
Filters
Using the Factory to Create a Log
Zend_Mail
Introduction
Sending via SMTP
Sending Multiple Mails per SMTP Connection
Using Different Transports
HTML E-Mail
Attachments
Adding Recipients
Controlling the MIME Boundary
Additional Headers
Character Sets
Encoding
SMTP Authentication
Securing SMTP Transport
Reading Mail Messages
Zend_Markup
Introduction
Getting Started With Zend_Markup
Zend_Markup Parsers
Zend_Markup Renderers
Zend_Measure
Introduction
Creation of Measurements
Outputting measurements
Manipulating Measurements
Types of measurements
Zend_Memory
Overview
Memory Manager
Memory Objects
Zend_Mime
Zend_Mime
Zend_Mime_Message
Zend_Mime_Part
Zend_Navigation
Introduction
Pages
Containers
Zend_Oauth
Introduction to OAuth
Zend_OpenId
Introduction
Zend_OpenId_Consumer Basics
Zend_OpenId_Provider
Zend_Paginator
Introduction
Usage
Configuration
Advanced usage
Zend_Pdf
Introducción
Creando y Cargando Documentos PDF
Guardar Cambios a Documentos PDF
Trabajando con Páginas
Dibujo
Interactive Features
Información del Documento y Metadatos
Ejemplo de Uso del módulo Zend_Pdf
Zend_ProgressBar
Zend_ProgressBar
Zend_Queue
Introduction
Example usage
Framework
Adapters
Customizing Zend_Queue
Stomp
Zend_Reflection
Introduction
Zend_Reflection Examples
Zend_Reflection Reference
Zend_Registry
Using the Registry
Zend_Rest
Introduction
Zend_Rest_Client
Zend_Rest_Server
Zend_Search_Lucene
Overview
Building Indexes
Searching an Index
Query Language
Query Construction API
Character Set
Extensibility
Interoperating with Java Lucene
Advanced
Best Practices
Zend_Serializer
Introduction
Zend_Serializer_Adapter
Zend_Server
Introduction
Zend_Server_Reflection
Zend_Service
Introduction
Zend_Service_Akismet
Zend_Service_Amazon
Zend_Service_Amazon_Ec2
Zend_Service_Amazon_Ec2: Instances
Zend_Service_Amazon_Ec2: Windows Instances
Zend_Service_Amazon_Ec2: Reserved Instances
Zend_Service_Amazon_Ec2: CloudWatch Monitoring
Zend_Service_Amazon_Ec2: Amazon Machine Images (AMI)
Zend_Service_Amazon_Ec2: Elastic Block Storage (EBS)
Zend_Service_Amazon_Ec2: Elastic IP Addresses
Zend_Service_Amazon_Ec2: Keypairs
Zend_Service_Amazon_Ec2: Regions and Availability Zones
Zend_Service_Amazon_Ec2: Security Groups
Zend_Service_Amazon_S3
Zend_Service_Amazon_Sqs
Zend_Service_Audioscrobbler
Zend_Service_Delicious
Zend_Service_DeveloperGarden
Zend_Service_Ebay
Zend_Service_Ebay_Finding
Zend_Service_Flickr
Zend_Service_LiveDocx
Zend_Service_Nirvanix
Zend_Service_ReCaptcha
Zend_Service_ShortUrl
Zend_Service_Simpy
Zend_Service_SlideShare
Zend_Service_StrikeIron
Zend_Service_StrikeIron: Bundled Services
Zend_Service_StrikeIron: Advanced Uses
Zend_Service_Technorati
Zend_Service_Twitter
Zend_Service_WindowsAzure
Zend_Service_WindowsAzure_Storage_Blob
Zend_Service_WindowsAzure_Diagnostics_Manager
Zend_Service_WindowsAzure_Storage_Queue
Zend_Service_WindowsAzure_Storage_Table
Zend_Service_Yahoo
Zend_Session
Introduction
Basic Usage
Advanced Usage
Global Session Management
Zend_Session_SaveHandler_DbTable
Zend_Soap
Zend_Soap_Server
Zend_Soap_Client
WSDL Accessor
AutoDiscovery
Zend_Tag
Introduction
Zend_Tag_Cloud
Zend_Test
Introducción
Zend_Test_PHPUnit
Zend_Test_PHPUnit_Db
Zend_Text
Zend_Text_Figlet
Zend_Text_Table
Zend_TimeSync
Introduction
Working with Zend_TimeSync
Zend_Tool
Using Zend_Tool On The Command Line
Extending Zend_Tool
Zend_Tool_Framework
Introduction
Usando la herramienta CLI
Architecture
Creando Proveedores para usar con Zend_Tool_Framework
Shipped System Providers
Extending and Configuring Zend_Tool_Framework
Zend_Tool_Project
Introduction
Create A Project
Zend_Tool Project Providers
Zend_Tool_Project Internos
Zend_Translate
Introduction
Adapters for Zend_Translate
Using Translation Adapters
Creating source files
Additional features for translation
Plural notations for Translation
Zend_Uri
Zend_Uri
Zend_Validate
Introducción
Clases de Validación Estándar
Cadenas de Validadores
Escribiendo Validadores
Validation Messages
Zend_Version
Obteniendo la versión de Zend Framework Version
Zend_View
Introduction
Controller Scripts
View Scripts
View Helpers
Zend_View_Abstract
Zend_Wildfire
Zend_Wildfire
Zend_XmlRpc
Introducción
Zend_XmlRpc_Client
Zend_XmlRpc_Server
ZendX_Console_Process_Unix
ZendX_Console_Process_Unix
ZendX_JQuery
Introduction
ZendX_JQuery View Helpers
ZendX_JQuery Form Elements and Decorators
Requisitos de Zend Framework
Versión de PHP
Extensiones de PHP
Componentes de Zend Framework
Dependencias de Zend Framework
Notas de Migración de Zend Framework
Zend Framework 1.10
Zend Framework 1.9
Zend Framework 1.8
Zend Framework 1.7
Zend Framework 1.6
Zend Framework 1.5
Zend Framework 1.0
Zend Framework 0.9
Zend Framework 0.8
Zend Framework 0.6
Estándares de codificación de Zend Framework para PHP
Introducción
Formato de archivos PHP
Convenciones de Nombres
Estilo de código
Zend Framework Documentation Standard
Overview
Documentation File Formatting
Recommendations
Recommended Project Structure for Zend Framework MVC Applications
Overview
Recommended Project Directory Structure
Module Structure
Rewrite Configuration Guide
Guía de Rendimiento de Zend Framework
Introduction
Class Loading
Zend_Db Performance
Internationalization (i18n) and Localization (l10n)
View Rendering
Copyright Information