Crear ficheros PDF

Anuncio
Crear ficheros PDF
Configuración de php.ini
Antes de utilizar esta opción es
preciso
hacer
una
pequeña
modificación en php.ini.
Hemos de descomentar la línea
que dice:
Comprobar si la opción está activada
Para comprobar si está activa la modificación del php.ini que
comentamos a la izquierda- bastaría con visualizar el famosísimo info.php y
comprobar que aparece lo siguiente:
;extension=php_pdf.dll
y como descomentar no es otra
cosa que quitar el punto y coma
que va delante de una línea,
habremos de dejarla así:
extension=php_pdf.dll
Una vez guardados los cambios
habrá que –como siempre en
estos casos– volver a iniciar el
servidor Apache.
Si es así, ya estamos en disposición de empezar a trabajar con este
nuevo tipo de funciones PHP.
La visualización de ficheros con extensión PDF requiere tener instalado el
programa Adobe Acrobat Reader. En caso de que nos dispusieras de él
puedes descargar desde el enlace incluido en este párrafo.
Unidades de medida
Cuando utilices PHP para generar
documentos PDF tendrás que
tener en cuenta que la unidad de
medida que debes usar es el
punto.
Como sabes, un punto es igual a
1/72 de pulgada y como una
pulgada es lo mismo que 25,4
milímetros pues ya sabes... las
medidas de un documento DIN A4 (297 x 210 mm.) serían:
297 x 72 / 25,4=842 puntos
210 x 72 / 25,4=595 puntos
Y ya que estamos metidos
matemáticas
hablaremos
del
sistema de coordenadas que se
utiliza en los PDF.
Ten
presente
que
utiliza
coordenadas cartesianas es decir
que -por defecto- el punto (0,0)
es la esquina inferior izquierda del
papel
y
que
los
valores
positivos de la ordenada se
miden hacia arriba y no en la
forma habitual de las coordenadas
de pantalla.
Los tipos de letra
Dentro del directorio en el que hemos instalado PHP hay un
subdirectorio que se llama pdf-related y dentro de este, un fichero
copyright.txt que contiene las advertencias legales sobre el uso de las
fuentes que contiene.
Además, hay otro fichero muy importante –el pdflib.upr –donde aparece
una lista como esta:
FontAFM
Courier=Courier.afm
Courier-Bold=Courier-Bold.afm
Courier-BoldOblique=Courier-BoldOblique.afm
Courier-Oblique=Courier-Oblique.afm
Helvetica=Helvetica.afm
Helvetica-Bold=Helvetica-Bold.afm
Helvetica-BoldOblique=Helvetica-BoldOblique.afm
Helvetica-Oblique=Helvetica-Oblique.afm
Symbol=Symbol.afm
Times-Bold=Times-Bold.afm
Times-BoldItalic=Times-BoldItalic.afm
Times-Italic=Times-Italic.afm
Times-Roman=Times-Roman.afm
ZapfDingbats=ZapfDingbats.afm
En este enlace tienes una muestra de las tipografías que contiene esta
lista, que son las que podremos utilizar en nuestros documentos PDF.
ejemplo132.pdf
Diferentes versiones
Existen diferentes versiones de la
librería PDFLib, y por si fuera
«PHP en la Educación»
Un fichero pdf en blanco
Aquí tienes el código fuente para crear el fichero pdf más sencillo: un
fichero que contiene tres páginas distintas, con distintos tamaños,
Crear ficheros PDF
Página 1
poco,
también
las
nuevas
versiones de PHP incorporan
nuevas
funciones
y
vuelven
obsoletas
algunas
de
las
anteriores.
Los ejemplos y funciones que
iremos comentando y utilizando
están desarrollados para que
puedan funcionar con la versión 3
y posteriores de la libreria PDFLib,
y con versiones posteriores a la
versión 4.0.3 de PHP, con lo cual,
aunque no incorporemos lo más
reciente, cubriremos un espectro
de posibilidades de utilización
mucho más amplio.
Creación
de ficheros PDF
Hechas estas advertencias previas, veamos las funciones que
permiten crear un fichero PDF.
$f = fopen("nom.pdf", "w")
Esta es una función ya conocida,
que recoge en la variable $f el
identificador del recurso generado
al crear un fichero -al que
asignamos un nombre y la
extensión PDF- mediante la
función fopen.
Mediante parámetro w se abre el
fichero en modo escritura, se
sitúa el puntero interno al
principio del mismo, se reduce su
tamaño a cero y, si aún no existe,
se crea el fichero.
No añadimos nada nuevo respecto
a lo tratado cuando nos referíamos
al manejo de ficheros.
$g = pdf_open($f)
Una vez creado el identificador de
recurso anterior debemos abrir el
fichero pdf utilizando la función
pdf_open, a la que pasamos la
variable en la que se recoge aquel
identificador de recurso.
pero en blanco. Fíjate que antes de crear cada nueva página cerramos la
anterior con pdf_end_page.
<?
$f = fopen("ejemplo133.pdf", "w");
$g = pdf_open($f);
#dimensionamos la página con formato A-4
pdf_begin_page($g, 595, 842);
pdf_end_page($g);
#dimensionamos la segunda página con formato A-5
pdf_begin_page($g, 421, 595);
pdf_end_page($g);
#dimensionamos la tercera página con formato A-6
pdf_begin_page($g, 297, 421);
pdf_end_page($g);
pdf_close($g);
?>
<A Href="ejemplo133.pdf">Ver el pdf creado</a>
Ejemplo133.php
Una simple línea de texto
Aquí tienes un ejemplo en el que creamos un documento pdf donde
aparecerá una línea de texto, pero... ¡fíjate donde aparece! ¿no la
encuentras? pues mira bien... mira al final de la página en la esquina
inferior izquierda. ¿Por qué? bueno la razón es que pdf_show empieza a
colocar el texto a partir de la coordenada (0,0) y ya sabes que aquí las
coordenadas son puramente cartesianas.
<?
$f = fopen("ejemplo134.pdf", "w");
$g = pdf_open($f);
pdf_begin_page($g, 595, 842);
pdf_set_font($g, "Times-Roman", 30,"host", 0 );
pdf_show($g,"Este es el texto");
pdf_end_page($g);
pdf_close($g);
?>
<A Href="ejemplo134.pdf">Ver el pdf creado</a>
Ejemplo134.php
Cambiando el origen de coordenadas
PHP dispone de una función que permite desplazar el origen de
coordenadas. Su utilización es muy sencilla, basta con escribir, después
de crear la nueva página, está función:
pdf_translate($g, x, y)
en la que $g es -como siempre- el identificador de recurso y x e y son las
coordenadas (horizontal y vertical) del nuevo origen de coordenadas.
Si observas el ejemplo que presentamos aquí debajo, hemos transladado
el origen a la ordenada 750 (como siempre en pixels) y quizá te preguntes
¿por qué no la cambiaron a 842 si 842 es la altura de la página?
Esta función devuelve un nuevo
identificador de recurso que es el
que hemos de utilizar en todas las
demás funciones que generan el
documento pdf.
La respuesta es sencilla, si hubiéramos puesto el nuevo origen en 842 lo
que ocurriría es que empezaría a escribir a partir de ese punto, pero hacia
arriba –la ordenada señala la base de la línea, y claro, si fuera el extremo
superior de la página escribiría fuera de ella y no se visualizaría.
pdf_begin_page($g,x,y)
Por esa razón hemos dejado el origen un poquito más abajo ¡para que
cupiera en la página!
Esta función comienza una
nueva página y como ves
contiene tres parámetros que
son: $g (el identificador del
«PHP en la Educación»
<?
$f = fopen("ejemplo135.pdf", "w");
$g = pdf_open($f);
Crear ficheros PDF
Página 2
recurso), x (el ancho de la página
expresado en pixels) e y (la altura
de la página también expresada
en pixels).
pdf_end_page($g)
Con esta función indicamos a PHP
que acaba la página.
Como ves, contiene un solo
parámetro: el identificador del
recurso.
Un documento PDF, como es
lógico, puede contener varias
páginas e, incluso, cada una de
ellas
puede
tener
tamaños
diferentes.
Para irlas creando incluiremos
sucesivos comienzos de página
teniendo cuidado de no poner ese
comienzo antes de haber puesto el
final de la anterior.
pdf_close($g)
Esta función cierra el fichero
PDF, que será guardado en el
servidor.
Para visualizarlo, bastará con
acceder a él a través de un enlace.
¡Fíjate en los ejemplos!
pdf_begin_page($g, 595, 842);
pdf_translate($g, 20, 750);
pdf_set_font($g, "Times-Roman", 30,"host", 0 );
pdf_show($g,"Este es el texto");
pdf_end_page($g);
pdf_close($g);
?>
<A Href="ejemplo135.pdf">Ver el pdf creado</a>
Ejemplo135.php
Saltos de línea y posicionamiento por coordenadas
En este ejemplo puedes observar los resultados de aplicar las funciones
pdf_show, pdf_continue_text y pdf_show_xy.
Observa como pdf_show va colocando un texto a continuación de otro siempre en la misma línea- sin tener en consideración si desborda o no el
margen del documento.
<?
$f = fopen("ejemplo136.pdf", "w");
$g = pdf_open($f);
pdf_begin_page($g, 595, 842);
pdf_translate($g, 20, 750);
pdf_set_font($g, "Times-Roman", 60,"host", 0 );
pdf_show($g,"Este es el texto");
pdf_show($g,"Mas texto");
pdf_continue_text($g,"Una nueva línea");
pdf_show_xy($g,"Esto sale en (40,-300)",40,-400);
pdf_end_page($g);
pdf_close($g);
?>
<A Href="ejemplo136.pdf">Ver el pdf creado</a>
Ejemplo136.php
Definir tipos de letra
Antes de insertar los textos es
necesario tener definida fuente
que se pretende utilizar.
¡Cuidado! Si no definimos fuentes
podemos
llevarnos
una
desagradable sorpresa.
pdf_set_font($g,let,x,t, n )
Para
usar
pdf_set_font
requiere
dar
valores
a
parámetros siguientes:
se
los
• $g, que es la variable del el
identificador de recurso.
• let, que es el nombre del tipo de
letra y, por tratarse de una
cadena, debe escribirse entre
comillas.
El nombre de letra ha de coincidir
exactamente con uno de los
nombres que figuran en el fichero
pdflib.upr -lo mencionamos a la
derecha al referirnos a tipos de
letra- y es el nombre que figura a
la izquierda del signo igual.
• x, que es un número que indica
«PHP en la Educación»
Los diferentes codificaciones de las fuentes
Los tipos de codificación que utiliza la función pdf_set_font son los
siguientes:
• winansi es la codificación de Windows con codepage 1252
• macroman es la codificación Mac Roman que utilizan por defecto los
sistemas Macintosh
• ebcdic es la codificación EBCDIC que utilizan algunos sistemas I.B.M.
de las series AS400 y S/390
• host Utiliza macroman en sistemas Macintosh, ebcdic en sistemas
basados en EBCDIC y winansi en todos los demás casos.
• builtin Utiliza una codificación específica aplicable en el caso de
fuentes de símbolos o a otras fuentes que no pertenecen al alfabeto
latino.
Como podrás observar, lo práctico y cómodo es utilizar la codificación
host que sirve para todo, con las excepciones de las fuentes Symbol y
ZapfDingbats que por sus peculiaridades -alfabeto griego en un caso y
símbolos en el otro- deben utilizar la codificación builtin.
<?
$f = fopen("ejemplo137.pdf", "w+");
$g = pdf_open($f);
pdf_begin_page($g, 595, 842);
Crear ficheros PDF
Página 3
el tamaño -en pixels- que
pretendemos asignar a la letra.
• t, que es una cadena que
recoge
el
tipo el tipo de
codificación de los caracteres y
que, por tratarse de una cadena,
debe escribirse entre comillas.
Admite los siguientes valores:
host,
winansi,
macroman,
ebcdic o builtin
La opción más práctica es utilizar
host en todos los casos, excepto
para
Symbol
y
para
ZapfDingbats, dónde hemos de
utilizar builtin.
• n puede tomar como valor 0 o
1. Lo dejaremos siempre como 0.
Una vez definida una fuente se
utilizará a lo largo de toda la
página hasta que no se defina
una distinta.
Insertar textos
Establecido un tipo de letra ya
estamos en disposición de poder
insertar textos. Para ello podemos
usar una de estas funciones:
pdf_show($g,texto)
donde
$g
sigue
siendo
el
identificador de recurso y texto
puede ser la cadena de texto que
pretendemos
escribir
(entre
comillas) o también el nombre de
una variable que contenga el texto
a insertar.
pdf_translate($g, 20, 842);
pdf_set_font($g, "Courier", 20,"host", 0 );
pdf_show_xy($g, "Courier", 0, -40);
pdf_set_font($g, "Courier-Bold", 20,"host", 0 );
pdf_continue_text($g,"Courier-Bold");
pdf_set_font($g, "Courier-BoldOblique", 20,"host", 0 );
pdf_continue_text($g,"Courier-BoldOblique");
pdf_set_font($g, "Courier-Oblique", 20,"host", 0 );
pdf_continue_text($g,"Courier-Oblique");
pdf_set_font($g, "Helvetica", 20,"host", 0 );
pdf_continue_text($g,"Helvetica");
pdf_set_font($g, "Helvetica-Bold", 20,"host", 0 );
pdf_continue_text($g,"Helvetica-Bold");
pdf_set_font($g, "Helvetica-BoldOblique", 20,"host", 0 );
pdf_continue_text($g,"Helvetica-BoldOblique");
pdf_set_font($g, "Helvetica-Oblique", 20,"host", 0 );
pdf_continue_text($g,"Helvetica-Oblique");
pdf_set_font($g, "Times-Bold", 20,"host", 0 );
pdf_continue_text($g,"Times-Bold");
pdf_set_font($g, "Times-BoldItalic", 20,"host", 0 );
pdf_continue_text($g,"Times-BoldItalic");
pdf_set_font($g, "Times-Italic", 20,"host", 0 );
pdf_continue_text($g,"Times-Italic");
pdf_set_font($g, "Times-Roman", 20,"host", 0 );
pdf_continue_text($g,"Times-Roman");
#cuidado con la definición de fuentes Zapfdingbats
pdf_set_font($g, "ZapfDingbats", 20,"builtin", 0 );
pdf_continue_text($g,"ZapfDingbats");
#cuidado con la definición de fuentes Symbol
pdf_set_font($g, "Symbol", 20,"builtin", 0 );
pdf_continue_text($g,"Symbol");
pdf_end_page($g);
pdf_close($g);
?>
<A Href="ejemplo137.pdf">Ver el pdf creado</a>
Ejemplo137.php
La función pdf_show no controla
si el texto cabe en el papel o no y,
además, a través las sucesivas
llamadas se irá insertando el texto
a conti- nuación del anterior y
siempre en las misma línea.
pdf_continue_text($g, txt)
Mediante esta función el texto
contenido en la cadena txt se
insertará en una nueva línea.
«PHP en la Educación»
Crear ficheros PDF
Página 4
Descargar