|
|
 |
XIV. Funciones ClibPDF
ClibPDF le permite crear documentos PDF con PHP. La funcionalidad
y la interfaz de programación de ClibPDF son similares a
PDFlib. Esta documentación
deberÃa ser leÃdo junto con el manual de ClibPDF,
ya que éste explica la biblioteca con mucho mayor detalle.
Muchas funciones en la biblioteca ClibPDF nativa y el
módulo PHP, asà como en PDFlib, tienen el mismo nombre. Todas
las funciones excepto por cpdf_open() reciben
el gestor del documento como su primer parámetro.
Actualmente este gestor no es usado internamente ya que ClibPDF
no soporta la creación de varios documentos PDF a la
vez. De hecho, no deberÃa intentarlo siquiera, los
resultados son impredecibles. Es difÃcil hacerse una idea
de las consecuencias que representarÃa en un entorno
multi-hilos. De acuerdo al autor de ClibPDF, esto cambiará
en uno de los lanzamientos siguientes (la versión actual
cuando se escribieron éstas lÃneas es 1.10). Si
necesita esta funcionalidad, use el módulo pdflib.
Una caracterÃstica interesante de ClibPDF (y PDFlib) es la habilidad de crear el
documento pdf completamente en memoria sin usar archivos
temporales. También provee la habilidad de pasar
coordenadas en una unidad de longitud predefinida. (Esta
caracterÃstica puede ser simulada también
por pdf_translate() cuando se usan las
funciones PDFlib.)
Otra caracterÃstica interesante de ClibPDF es el hecho de
que cualquier página puede ser modificada en cualquier
momento, incluso si una nueva página ya ha sido
abierta. La función
cpdf_set_current_page() permite abandonar la
página actual y posiblemente modificar otra página.
La mayorÃa de funciones son razonablemente fáciles
de usar. La parte más difÃcil es probablemente la
creación misma de un documento PDF muy sencillo. El
ejemplo presentado a continuación deberÃa ayudarlo
a iniciar. En éste se crea un documento con una
página. La página contiene el texto "Times-Roman"
en una fuente tipográfica de borde exterior y 30pt. El
texto es subrayado.
Nota:
This extension has been moved to the PECL repository and is no longer bundled with
PHP as of PHP 5.1.0.
Nota:
Si está interesado en generadores de PDF gratuitos
alternativos que no usen bibliotecas PDF externas, vea este FAQ relacionado.
Para poder usar las funciones ClibPDF necesita instalar el
paquete ClibPDF. Éste se encuentra disponible para su
descarga en FastIO, pero
requiere que compre una licencia para su uso comercial. PHP
requiere que usted use cpdflib >= 2.
Para poder utilizar estas funciones, se debe compilar PHP con la
siguiente opción de configuración --with-cpdflib[=DIR].
DIR se refiere al directorio de instalación de cpdflib, cuyo valor por defecto
es /usr. Además, si se requiere que ClibPDF haga uso de las
librerÃas JPEG y TIFF, se deben añadir también las siguientes
opciones --with-jpeg-dir[=DIR] y --with-tiff-dir[=DIR].
Esta extensión no tiene directivas de
configuración en php.ini. Estas constantes están
definidas por esta extensión y estarán disponibles
solamente cuando la extensión ha sido o bien compilada dentro
de PHP o grabada dinámicamente en tiempo de ejecución.
Ejemplo 1. Ejemplo Simple de ClibPDF |
<?php
$cpdf = cpdf_open(0);
cpdf_page_init($cpdf, 1, 0, 595, 842, 1.0);
cpdf_add_outline($cpdf, 0, 0, 0, 1, "Pag. 1");
cpdf_begin_text($cpdf);
cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
cpdf_set_text_rendering($cpdf, 1);
cpdf_text($cpdf, "Times Roman outlined", 50, 50);
cpdf_end_text($cpdf);
cpdf_moveto($cpdf, 50, 50);
cpdf_lineto($cpdf, 740, 330);
cpdf_stroke($cpdf);
cpdf_finalize_page($cpdf, 1);
cpdf_finalize($cpdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($cpdf);
cpdf_close($cpdf);
?>
|
|
La distribución de pdflib contiene un ejemplo más
complejo que genera una serie de páginas con un reloj
análogo. Aquà está ese ejemplo convertido a
PHP usando la extensión ClibPDF:
Ejemplo 2. Ejemplo pdfclock tomado de la distribución de
pdflib 2.0 |
<?php
$radio = 200;
$margen = 20;
$conteo_paginas = 40;
$pdf = cpdf_open(0);
cpdf_set_creator($pdf, "pdf_clock.php");
cpdf_set_title($pdf, "Reloj Análogo");
while ($conteo_paginas-- > 0) {
cpdf_page_init($pdf, $conteo_paginas+1, 0, 2 * ($radio + $margen), 2 * ($radio + $margen), 1.0);
cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0); cpdf_translate($pdf, $radio + $margen, $radio + $margen);
cpdf_save($pdf);
cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);
cpdf_setlinewidth($pdf, 2.0);
for ($alpha = 0; $alpha < 360; $alpha += 6) {
cpdf_rotate($pdf, 6.0);
cpdf_moveto($pdf, $radio, 0.0);
cpdf_lineto($pdf, $radio-$margen/3, 0.0);
cpdf_stroke($pdf);
}
cpdf_restore($pdf);
cpdf_save($pdf);
cpdf_setlinewidth($pdf, 3.0);
for ($alpha = 0; $alpha < 360; $alpha += 30) {
cpdf_rotate($pdf, 30.0);
cpdf_moveto($pdf, $radio, 0.0);
cpdf_lineto($pdf, $radio-$margen, 0.0);
cpdf_stroke($pdf);
}
$ltime = getdate();
cpdf_save($pdf);
cpdf_rotate($pdf, -(($ltime['minutes']/60.0) + $ltime['hours'] - 3.0) * 30.0);
cpdf_moveto($pdf, -$radio/10, -$radio/20);
cpdf_lineto($pdf, $radio/2, 0.0);
cpdf_lineto($pdf, -$radio/10, $radio/20);
cpdf_closepath($pdf);
cpdf_fill($pdf);
cpdf_restore($pdf);
cpdf_save($pdf);
cpdf_rotate($pdf, -(($ltime['seconds']/60.0) + $ltime['minutes'] - 15.0) * 6.0);
cpdf_moveto($pdf, -$radio/10, -$radio/20);
cpdf_lineto($pdf, $radio * 0.8, 0.0);
cpdf_lineto($pdf, -$radio/10, $radio/20);
cpdf_closepath($pdf);
cpdf_fill($pdf);
cpdf_restore($pdf);
cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
cpdf_setlinewidth($pdf, 2);
cpdf_save($pdf);
cpdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
cpdf_moveto($pdf, -$radio/5, 0.0);
cpdf_lineto($pdf, $radio, 0.0);
cpdf_stroke($pdf);
cpdf_restore($pdf);
cpdf_circle($pdf, 0, 0, $radio/30);
cpdf_fill($pdf);
cpdf_restore($pdf);
cpdf_finalize_page($pdf, $conteo_paginas+1);
}
cpdf_finalize($pdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($pdf);
cpdf_close($pdf);
?>
|
|
Vea también la documentación de la
extensión PDFlib.
add a note
User Contributed Notes
Funciones ClibPDF
florent AT clairambault.fr
04-Jun-2006 04:11
There's an alternative way to generate PDF document, it's FPDF : FPDF is a PHP class which allows to generate PDF files with pure PHP, that is to say without using the PDFlib library. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.
So that you don't have to add any PHP library.
puterasalji at yahoo dot com
06-Apr-2003 08:32
I've finally found a way to display text
<?php
$radius = 200;
$margin = 20;
$pagecount = 1;
$pdf = cpdf_open(0);
cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0);
cpdf_translate($pdf, $radius + $margin, $radius + $margin);
cpdf_begin_text($pdf);
cpdf_set_font($pdf, "Arial", 30, "NULL");
cpdf_set_text_rendering($pdf, 1);
cpdf_text($pdf, "Yahoo!!", -198, 50);
cpdf_end_text($pdf);
for ($alpha = 0; $alpha < 90; $alpha += 6)
{
cpdf_setrgbcolor($pdf,9.0,9.0,0.0);
cpdf_rotate($pdf, 6.0);
cpdf_moveto($pdf, $radius, 0.0);
cpdf_lineto($pdf, $radius-$margin/3, 0.0);
cpdf_stroke($pdf);
}
cpdf_finalize($pdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($pdf);
cpdf_close($pdf);
?>
I'm not sure why, but the text appeared only after I've pasted the minute strokes draw function from clock.php example. I user the cpdf_translate to begin the x,y coordinate in the middle of the document
| |
|
| Chiste de... Niños | | Que viene el coco | Un niño africano llega corriendo y le dice a su madre:
- ¡Mamá, el coco se ha llevado a papá!
- ¿Qué coco?
- El cocodrilo. | | Chistes en tu mail | | ©ContenidosGratis |
| Inicio | Acción | Estrategia | Palabras | Puzzles | Solitarios | Foro Trucos |  | Cake Mania Jugadores: 6835 Categoría del juego: Acción Objetivo del juego: Ayuda a Jill a recuperar la pastelería de su abuela llevando su propia pastelería; consigue clientes y gana dinero. |
|  | Rainbow Web Jugadores: 2199 Categoría del juego: Puzzles Objetivo del juego: Rompe un pegajoso hechizo y salva un reino de fantasía en Rainbow Web. Tendrás toneladas de diversión mientras juegas a este mágico desafío para la mente. |
|  | Mahjongg Fortuna Jugadores: 12462 Categoría del juego: Solitarios Objetivo del juego: Velocidad y habilidad mental son las armas más importantes en esta versión de un antiguo juego asiático. Despeja el tablero lo antes posible haciendo clic en las fichas iguales y gánate la fama eterna de la puntuación más alta. |
|  | Chainz 2 Jugadores: 6955 Categoría del juego: Puzzles Objetivo del juego: Entra en el mundo de las combinaciones con Chainz 2: Relinked, emocionante secuela del exitazo del año pasado, Chainz. Gira eslabones y crea combinaciones de 3 ó más. |
|  | Delicious Jugadores: 4405 Categoría del juego: Acción Objetivo del juego: ¿Eres un as de la multitarea? ¿Quieres que tus clientes estén contentos? ¡Pues Delicious es tu juego! Sacia el apetito de los clientes y tenlos contentos; ¡no te arriesgues! |
|  | Bookworm Jugadores: 4568 Categoría del juego: Palabras Objetivo del juego: Junta las letras para formar palabras. ¡Las palabras más largas valen más puntos! |
|  | Zuma Jugadores: 4976 Categoría del juego: Acción Objetivo del juego: Controla el ídolo de la rana de piedra de los antiguos Zuma en este intrigante enigma de acción. ¡Dispara bolas para formar conjuntos de tres, pero si dejas que lleguen a la calavera dorada morirás! |
|  | Jewel of Atlantis Jugadores: 3798 Categoría del juego: Puzzles Objetivo del juego: Descubre la ciudad hundida de la Atlántida y busca valiosos tesoros. Viaja más allá de las profundidades del mar y vive trepidantes aventuras en Jewel of Atlantis. |
|  | Jewel Quest Jugadores: 3727 Categoría del juego: Puzzles Objetivo del juego: Convierte la arena de la antigua selva en oro tan rápido como puedas juntando grupos de 3 elementos. ¡Los grupos más grandes valen más puntos! |
|  | Bejeweled 2 Jugadores: 3659 Categoría del juego: Puzzles Objetivo del juego: Con cuatro modos de juego únicos y fascinantes, nuevas piezas de juego explosivas e imponentes fondos planetarios, Bejeweled 2 es mucho más adictivo que nunca. |
|
|