Lineas y rectangulos
La clase FPDF incluye métodos para el dibujo de segmentos rectilineos y de rectángulos.
Las funciones que utiliza para estos menesteres son las siguientes:
$obj->Line(X1,Y1,X2,Y2)
Si no se ha especificado ningún color -usando SetDrawColor- o un espesor de línea - por medio de SetLineWidth - se usarán los valores por defecto (color negro y 0,2 mm. de espesor).
Cuando se trata de dibujar rectángulos, hemos de utilizar la función:
$obj->Rect(X1,Y1,A,H,'estilo')
donde X1 e Y1 son las coordenadas de la esquina superior izquierda del mismo, A el ancho, H el alto y estilo que puede ser una de estas tres cadenas: D, F, DF que significan: dibujar líneas de borde, rellenar, y dibujar líneas y rellenar. Si no se especifica estilo se interpretará por defecto la opción D.
Las funciones que utiliza para estos menesteres son las siguientes:
$obj->Line(X1,Y1,X2,Y2)
Si no se ha especificado ningún color -usando SetDrawColor- o un espesor de línea - por medio de SetLineWidth - se usarán los valores por defecto (color negro y 0,2 mm. de espesor).
Cuando se trata de dibujar rectángulos, hemos de utilizar la función:
$obj->Rect(X1,Y1,A,H,'estilo')
donde X1 e Y1 son las coordenadas de la esquina superior izquierda del mismo, A el ancho, H el alto y estilo que puede ser una de estas tres cadenas: D, F, DF que significan: dibujar líneas de borde, rellenar, y dibujar líneas y rellenar. Si no se especifica estilo se interpretará por defecto la opción D.
Las imágenes GIF
La clase FPDF, en su versión original, no permite utilizar imágenes en formato GIF. No obstante es posible adaptar la clase y añadirle esa posibilidad. Para ello es preciso realizar las modificaciones que se indican a continuación:
Modificación de la clase FPDF
El fichero fpdf.php que contiene la clase FPDF tiene una carencia relativa a la gestión de imágenes en formato GIF. En la propia principal http://www.fpdf.org/ se hace una mención a esa carencia y la forma de subsanarla.
y que pueden resumires en tres acciones.
La primera de ellas es efectuar una modificación de la función Image() contenida en la clase FPDF del fichero fpdf.php. Se trata de incluir la condición para imágenes gif.
El uso de imágenes GIF requiere utilizar una nueva función llamada _parsegif -la tienes en la tabla anterior- que habrá que incluir como un método más dentro de la clase FPDF.
La función _parsegif requiere el uso de un nuevo fichero -gif.php- desarrollado por Yamasoft y que nosotros hemos encontrado en el fichero zip que puede descargarse desde este enlace. Lo hemos extraido de él y lo hemos incluido en estos materiales.
Hemos editado el fichero fpdf.php y lo hemos guardado con un nuevo nombre: fpdf_con_gif.php (se trata de conservar el fichero original y hacer los cambios sobre uno nuevo) y hemos realizado los cambios que se indican antes sobre este último fichero.
Una vez realizadas las modificaciones la opción GIF ha quedado totalmente funcional.
Modificación de la clase FPDF
El fichero fpdf.php que contiene la clase FPDF tiene una carencia relativa a la gestión de imágenes en formato GIF. En la propia principal http://www.fpdf.org/ se hace una mención a esa carencia y la forma de subsanarla.
Fichero inicial | fpdf.php |
Guardado como | fpdf_con_gif.php |
Modificaciones en el fichero inicial | |
Línea | Cambios |
911 | Donde dice: |
if($type=='jpg' || $type=='jpeg') $info=$this->_parsejpg($file); elseif($type=='png') $info=$this->_parsepng($file); else { //Allow for additional formats | |
añadir las líneas en rojo: | |
if($type=='jpg' || $type=='jpeg') $info=$this->_parsejpg($file); elseif($type=='png') $info=$this->_parsepng($file); elseif($type=='gif') $info=$this->_parsegif($file); else { //Allow for additional formats | |
1638 | Donde dice: |
//End of class } | |
anteponer: | |
function _parsegif($file){ | |
Incluir (en el mismo directorio que fpdf_con_gif.php) el fichero: | |
gif.php | |
y que pueden resumires en tres acciones.
La primera de ellas es efectuar una modificación de la función Image() contenida en la clase FPDF del fichero fpdf.php. Se trata de incluir la condición para imágenes gif.
El uso de imágenes GIF requiere utilizar una nueva función llamada _parsegif -la tienes en la tabla anterior- que habrá que incluir como un método más dentro de la clase FPDF.
La función _parsegif requiere el uso de un nuevo fichero -gif.php- desarrollado por Yamasoft y que nosotros hemos encontrado en el fichero zip que puede descargarse desde este enlace. Lo hemos extraido de él y lo hemos incluido en estos materiales.
Hemos editado el fichero fpdf.php y lo hemos guardado con un nuevo nombre: fpdf_con_gif.php (se trata de conservar el fichero original y hacer los cambios sobre uno nuevo) y hemos realizado los cambios que se indican antes sobre este último fichero.
Una vez realizadas las modificaciones la opción GIF ha quedado totalmente funcional.
¡Cuidado!
Los cambios comentados en la tabla anterior ya han sido realizados.
Lao ficheros gif.php y fpdf_con_gif.php se han incluido junto con estos materiales.
Los cambios comentados en la tabla anterior ya han sido realizados.
Lao ficheros gif.php y fpdf_con_gif.php se han incluido junto con estos materiales.
Inserción de imágenes
Se pueden incluir imágenes mediante la función:
$obj->Image('nombre',X1,Y1,A,H,'tipo','enl')
donde X1 e Y1 son las coordenadas dónde se situará la esquina superior izquierda de la imagen, A es el ancho con el que se visualizará la imagen, H su altura, tipo es el formato de la imagen original que puede ser: JPG, JPEG, PNG ó GIF. Por último, el parámetro enl permite -tal como ocurría con CELL ó con WRITE y con los mismos criterios allí utilizados- establecer un enlace externo o una referencia interna.
El parámetro nombre debe especificar la ruta, el nombre y la extensión de la imagen a incluir. La clase no soporta ni entrelazados en las imágenes gif ni transparencias (canales alfa) en las imágenes png.
Las dimensiones de la imagen pueden omitirse (incluyendo en su lugar una cadena vacia). En ese caso incluiría la imagen original con una resolución de 72 puntos por pulgada.
Si se especifica una sola de las dimensiones la otra se calcula de forma automática y se mantienen las proporciones. Si se insertan valores de largo y ancho pueden generarse, a voluntad, efectos de distorsión.
$obj->Image('nombre',X1,Y1,A,H,'tipo','enl')
donde X1 e Y1 son las coordenadas dónde se situará la esquina superior izquierda de la imagen, A es el ancho con el que se visualizará la imagen, H su altura, tipo es el formato de la imagen original que puede ser: JPG, JPEG, PNG ó GIF. Por último, el parámetro enl permite -tal como ocurría con CELL ó con WRITE y con los mismos criterios allí utilizados- establecer un enlace externo o una referencia interna.
El parámetro nombre debe especificar la ruta, el nombre y la extensión de la imagen a incluir. La clase no soporta ni entrelazados en las imágenes gif ni transparencias (canales alfa) en las imágenes png.
Las dimensiones de la imagen pueden omitirse (incluyendo en su lugar una cadena vacia). En ese caso incluiría la imagen original con una resolución de 72 puntos por pulgada.
Si se especifica una sola de las dimensiones la otra se calcula de forma automática y se mantienen las proporciones. Si se insertan valores de largo y ancho pueden generarse, a voluntad, efectos de distorsión.
Inserción de imágenes dinámicas
Es posible combinar la potencia gráfica de las funciones de PHP para la creación de imágenes dinámicas con la opción de crear ficheros PDF mediente la clase FPDF. La forma de proceder es simple y puedes verla en el ejemplo que tienes al final.
Basta incluir una función -dentro del mismo fichero o por inclusión de un fichero externo que la contenga- que cree la imagen dinámica y la guarde con un nombre previamente establecido.
Incluimos el nombre de esa imagen en la función Image y, una vez producida la salida mediante Output, proceder a borrarla del directorio en el que fue creada.
Basta incluir una función -dentro del mismo fichero o por inclusión de un fichero externo que la contenga- que cree la imagen dinámica y la guarde con un nombre previamente establecido.
Incluimos el nombre de esa imagen en la función Image y, una vez producida la salida mediante Output, proceder a borrarla del directorio en el que fue creada.
Un ejemplo con gráficos e imágenes <? #incluimos el fichero resultante de las modificaciones anteriores include("fpdf_con_gif.php"); define('FPDF_FONTPATH','c:/Apache/htdocs/cursoPHP/fontsPDF/'); /* establecemos las dimensiones del documento en mm. creamos un nuevo objeto y A-4 apaisado. Hemos modificado algunas funciones de la clase pero no le hemos cambiado el nombre, por ello el constructor es el mismo */ $MiPDF=new FPDF('L','mm','A4'); # ajustamos la visualización para ver la página completa en pantalla $MiPDF->SetDisplayMode('fullpage'); #añadimos una página $MiPDF->AddPage(); # sin haber definido previamente ni un color ni un ancho de linea # aparecerá en negro y con un espesor de 0.2 mm $MiPDF->Line(5,5,287,5); #ensayamos las diferentes opciones de rectangulos #con los colores y espesores por defecto $MiPDF->Rect(10,10,50,50); $MiPDF->Rect(70,10,50,50,'D'); $MiPDF->Rect(140,10,50,50,'F'); $MiPDF->Rect(200,10,50,50,'DF'); # modificamos los colores y espesores de linea $MiPDF->SetDrawColor(255,0,0); $MiPDF->SetFillColor(0,0,255); $MiPDF->SetLineWidth(3); # dibujamos nuevos rectángulos con los nuevos valores $MiPDF->Rect(10,65,50,50); $MiPDF->Rect(70,65,50,50,'D'); $MiPDF->Rect(140,65,50,50,'F'); $MiPDF->Rect(200,65,50,50,'FD'); # insertamos una imagen (png) sin especificar dimensiones $MiPDF->Image('./images/cruz.png',10,118,'','','png'); # otra imagen(jpg) en la que unicamente especificamos el alto $MiPDF->Image('./images/cabina.jpg',90,118,'',90,'jpg'); # otra imagen(gif) en la que especificamos ancho y alto y provocamos # una distorsión $MiPDF->Image('./images/peligro.gif',215,118,80,50,'gif'); #añadimos una nueva página $MiPDF->AddPage(); # asignamos un nombre a la imagen dinámica que vamos a generar # e incluir en el documento PDF $imagen="ladinamica.jpg"; # ejecutamos la función que crea la nueva imagen imagen1($imagen); # insertamos la nueva imagen y generamos la salida $MiPDF->Image($imagen, 45, 35 , 150, '','jpg','http://www.google.es'); $MiPDF->Output(); # ya podemos borrar la imagen dinámica que hemos creado unlink($imagen); # esta es la función que crea la imagen dinamica # le asignamos un nombre para que sea guarda temporalmente # en el directorio actual function imagen1($imagen){ Header("Content-type: image/jpeg"); $im = imagecreate(200,200); $fondo=imagecolorallocate ($im, 0, 0, 200); $blanco=imagecolorallocate ($im, 255, 255, 255); Imagefill ($im, 0, 0, $fondo); Imagerectangle ($im, 10, 10, 190, 190, $blanco); Imagejpeg($im,$imagen); ImageDestroy($im); } ?> |
No hay comentarios:
Publicar un comentario