PDF en PHP

En la actualidad me encuentro realizando una aplicación en PHP donde necesitamos sacar unos ficheros en php.

En principio hay que decir que hay muchos componentes y librerías para hacer los PDFs en PHP, pero aquí solo me voy a centrar en hablar de las soluciones que he encontrado libres y daré mi opinión sobre el tema.

Antes de nada piensa qué es lo que tienes que sacar en PDF, puesto que dependiendo de la forma que generas el PDF será más sencillo o más difícil de mantener la aplicación.

RTF (Ritch Text Format)

Lo ideal es utilizar ficheros RTF como plantilla, se pueden hacer desde un fichero de Microsoft Word o desde el Writer del OpenOffice.

La ventaja de esta técnica de generar PDFs es que las plantillas RTFs son muy fáciles de mantener, sólo hay que poner unos tags dentro del fichero, y como los RTFs son ficheros de texto, se pueden abrir desde PHP, guardarlos en una variable y cambiar lo que se quiera, para luego guardarlo en otro fichero RTF.

El problema de esta técnica es que en PHP no hay componentes o clases que te permitan hacerlo desde el Apache, sin instalar software adicional, con lo que en los hosting compartidos esta opción es inviable, o al menos yo no lo he encontrado (he buscado componentes de pago, pero los que encontré eran realmente caros y ya no me compensaban). La opción económica para hacer este caso es tener un hosting privado e instalar la OpenOffice y creo que unos paquetes especiales de la OpenOffice, para así poder utilizar el Writer en modo consola y transformar el fichero RTF a PDF.

FPDF [1]

La FPDF (FreePDF) es una implementación gratuita de la PDFLib (que es de pago), aunque la PDFLib hoy en día trae añadidos de seguridad del fichero PDF generado, como imposibilidad de copiar, de imprimir, cifrado, …

Esta es la librería PHP principal que vamos a ver, puesto que las demás que vamos a ver son librerías que heredan de ella, en algunos casos modifican un poco el código para optimizar o facilitar el uso de la extensión de la librería.

De todas las que he encontrado es la que mejor está documentada, aunque en todas las librerías se pueden encontrar un directorio con ejemplos.

En esta librería para generar un PDF tenemos que programar el contenido del PDF.

Una de las ventajas de esta librería es que como es de las más usadas, tiene una pagína donde podemos ver ejemplos de scripts para hacer funcionalidades que no están dentro de la librería, la sección Scripts de la web [2].

Por último, decir que aquellos que seais unos multiprogramadores como yo, hay una implementación de la libreria para ASP 3.0 [3]. Yo no la he probado, si alguien lo prueba por favor que me comente algo.

HTML2PDF [4]

Esta librería es una extensión de la FPDF, que nos permite poner como contenido del PDF un documento XHTML. Por desgracia la poca documentación que hay está en un foro en Francés y todavía esta en desarrollo, puesto que hay muchos estilos de CSS que no los reconoce.

Es una buena alternativa a los RTFs cuando se quiere hacer una plantilla que va a ser modificada cada cierto tiempo, puesto que modificar un XHTML es muy sencillos con programas como el Adobe DreamWeaver o Microsoft Expresions, o incluso la Microsoft Office o la OpenOffice, aunque para estas dos últimas opciones necesitaremos retocar el código para adaptarlo al código que interpreta la clase.

Tiene pocos ejemplos, pero la verdad es que son suficientes para enseñar las cosas que hace esta librería PHP.

TCPDF [5]

Sin dudas una de las mejores extensiones a la librería FPDF. En su web encontramos una amplia documentación, además es la librería que tiene más ejemplos, un total de 36 ejemplos en el ZIP que nos descargamos desde la web. Además de las cosas típicas que nos permiten todas las librería que he encontrado (insertar código html, cabeceras, pies, …) nos permite crear Códigos de barras para insertarlos en los documentos PDFs que vamos a mostrar. En algunas ocaciones esto es muy útil.

Una cosa que he visto que no he encontrado en otras librerías de PHP es que tiene soporte para incrustar JavaScript para la comprobación de datos de los formularios para los PDFs generados.

Por último decir que esta librería soporta texto Unicode UTF8, con lo que nos permite realizar documentos PDFs en caracteres no indoeuropeos, como el árabe, ruso o chino.

mPDF [6]

Esta librería al igual que la anterior también está muy  bien documentada y en inglés. Esta librería es una extensión de la FPDF que soporta texto Unicode UFT-8, y está especializada en este aspecto. A primera vista, no la he probado todavía, es muy similar a la librería anterior (TCPDF). Una de las cosas que más me han sorprendido es que esta librería es la que más fuentes trae por defecto, de echo el fichero zip de todas las demás librerías apenas llega a los 1Mb, esta librería tienen un zip de 11Mb. Esta cantidad de Mb se deben a las fuentes y a los ejemplos, que  también tiene un motón de ejemplos.

Conclusión

Hemos visto en este artículo una librería y cuatro extensiones de ésta. Cada una tiene sus ventajas y sus inconvenientes. En la medida de lo posible voy a intentar investigar un poco más de cada librería e intentaré hacer un artículo más en profundidad y código de las distintas librerias que hemos visto anteriormente. En la actualidad yo he utilizado la HTML2PDF, puesto que es la más sencilla desde mi punto de vista para trabajar con HTML, para el poco tiempo que he tenido para estudiar el funcionamiento de las librerías, si en vez de 2 días hubiese tienido 2 ó 3 semanas hubiera podido ver todas las posibilidades con más detenimiento, y a lo mejor hubirera podido seleccionar otra librería, pero nunca se sabe, la verdad es que lo fácil que es trabajar con la HTML2PDF es asombroso, pero tiene muy pocas fuentes de texto, o al menos las que vienen por defecto, repito que he tenido muy poco tiempo para investigar más.

Enlaces:

[1] FPDF: http://www.fpdf.org

[2] Página de Scripts de FPDF: http://www.fpdf.org/es/script/index.php

[3] ASP FPDF: http://www.aspxnet.it/public/default.asp

[4] HTML2PDF: http://html2pdf.spipu.net/

[5] TCPDF: http://www.tcpdf.org/

[6] mPDF: http://mpdf.bpm1.com/

Publicado en Sin categorí­a | Etiquetado , , | 1 comentario

URL Amigables (y III) (ASP)

Bueno, lo del retraso va a ser lo usual en mi por lo que parece, pero entre que he estado muy liado con un proyecto grande y que en medio he estado de vacaciones he tardado un poco en escribir esta entrada.

En esta entrada, que en principio será la última de las URL Amigables, vamos a ver cómo implementarlas en ASP 3.0 sobre IIS, como mi hosting es PHP no puedo poner ningún ejemplo on-line, pero si pondré un ejemplo comprimido en formato zip para que lo podáis probar en vuestro IIS.

Al igual que en php lo que vamos a utilizar para simuar el módulo ReWrite de Apache es usar la página de error 404. Para ello lo que hay que hacer es crear el sitio web en el IIS. Luego editamos el sitio web, para ello pulsamos con el botón derecho sobre el sitio web y accedemos a las propiedades del sitio web. Una vez que estamos en las propiedades del sitio web, pincha sobre la carpeta de errores personalizados. Allí deberás de cambiar todos los errores que se generan con el error 404, generalmente hay 3 (al menos en el IIS6 de Windows 2003, que es yo utilizo). La url que debes poner es /controllers/controller.asp (para mi ejemplo, en otro caso deberás poner el fichero que desees). Como puedes ver es lo mismo que hice en PHP.

Ahora ya solo nos queda procesar la URL y dirigirnos al módulo necesario.

ASP:
  1. <%
  2. '  Vamos a averiguar el controlador que se nos ha pedido.
  3. strController = replace(Request.QueryString, "404;http://localhost/urlamigables:80/", "")
  4.  
  5. aControl = split(strController, "/")
  6.  
  7. Control = ""
  8. Param = ""
  9.  
  10. If IsArray(aControl) And UBound(aControl)&gt; 0 Then
  11. Control = aControl(0)
  12. Session("ParamController") = Replace(strController, aControl(0) &amp; "/", "")
  13. Else
  14. '  No es array, con lo que no hay ninguna barra y el strController es el control.
  15. Control = strController
  16. Session("ParamController") = ""
  17. End If
  18.  
  19. Select Case LCase(Control)
  20. Case "modulo1" :
  21. Server.Execute("modulo1.asp")
  22. Case "modulo2"
  23. Server.Execute("modulo2.asp")
  24. Case Else :
  25. Server.Execute("404.asp")
  26. End Select
  27. %>

puedes ver es lo mismo que hice en PHP

Bueno básicamente ya solo quedan los ficheros de los módulos y el fichero de acciones, que no tienen mucho que ver, los podéis ver en el zip con todos los ficheros necesarios.

Fichero Zip con un ejemplo de las url amigales.

Pues ya está acabada esta serie de 3 artículos sobre las URLs Amigables. Espero que mi próximo artículo no se espacie mucho en el tiempo, pero es que estoy muy liado, hay veces que estoy muy ocioso, y otras veces me salen 3 trabajos a la vez, y no los puedo rechazar.

Publicado en programación | Etiquetado , | Deja un comentario

URL Amigables (II)(php)

Bueno con más de dos meses de retardo, voy a seguir con esta serie de artículos que tienen que ver con las URLs Amigables (en inglés SEO URLs). La razón ha sido que he estado trabajando a destajo para un proyecto en el que estoy trabajando, en el que estoy aprendiendo mucho y ya iré publicando las cosas que he ido aprendiendo.

Bueno vamos a lio con las URL Amigables.

Lo primero he de decir que dependiendo de si trabajamos en IIS o en Apache, en los ejemplos iré mostrandolo.

En primer lugar decir que las pruebas las he desarrollado sobre Windows Vista Home Premium con el Servidor Web WampServer 2.0, aunque luego lo he probado en un Windows 2003 Server con IIS 6 y en Debian Linux con Apache 2.0 (en mi hosting de Powweb).

Si estamos en Apache lo primero que tenemos que hacer es crear un fichero .htaccess para poder redirigir las urls amigables a las páginas que corresponden, para ello recordamos que el artículo I se dice que vamos a utilizar esta pequeña chapuza.

En el fichero .htaccess escribiremos el siguiente texto.

ErrorDocument 404 /urlAmigables/controllers/controller.php

Esta línea que se introduce en el .htaccess significa que si genera el error 404 en el servidor (Página no encontrada) que se vaya a la url /urlAmigables/controllers/controller.php, Es en este fichero donde se va a hacer el procesado de la URL para luego ejecutar dentro las acciones pertinentes.

El llamar a esta página controller.php tiene que ver puesto que esta idea se me ocurrió aprendiendo a utilizar las Frameworks de PHP, que para mi gusto están bien para hacer desarrollos pequeños, en desarrollos más grandes es mejor utilizar, desde mi punto de vista, herramientas propias.

En el fichero controller.php debemos introducir:

PHP:
  1. <?php
  2.     $URLAmigable = urldecode($_SERVER['REQUEST_URI']);
  3.  
  4.     //  Como en el apache tengo varios sitios en el sito web localhost, tengo que quitar de la url
  5.     // el sitio web sobre el que estoy trabajando.
  6.     //$URLAmigable = str_replace('/urlAmigables/', '', $URLAmigable);
  7.     $URLAmigable = substr($URLAmigable, 1);
  8.  
  9.     //  Procesamos la URL Amigable para poder procesar el fichero.
  10.     $Params = split('/', $URLAmigable);
  11.     $controller = '';
  12.     if (Count($Params)> 0)
  13.     {
  14.         $controller = $Params[0];
  15.     }
  16.     else if($URLAmigable != '')
  17.     {
  18.         $controller = $URLAmigable;
  19.     }
  20.  
  21.     $strParams = str_replace($controller . '/', '', $URLAmigable);
  22.  
  23.     switch(strtolower($controller))
  24.     {
  25.         case "modulo" :
  26.         case "módulo" :
  27.             include('modulo.php');
  28.             break;
  29.         default:
  30.             header('', true, 404);
  31.             include('error404.php');
  32.             break;
  33.     }
  34. ?>

En el IIS en vez de poner el fichero .htaccess, hay que cambiar la url del error 404, si tienes acceso al IIS de tu servidor, deberás acceder a él y luego en el sitio web cambiar las direcciones de error del 404 (por defecto vienen 3) y ponerlas a este fichero. Sino tienes acceso al IIS, seguro que tu servicio de hosting tiene en algún lugar algún sitio donde poder cambiar dicho fichero.

Pues ya está solo hace falta hacer el fichero de error para cuando se introducen direcciones que no son válidas (error404.php) y los ficheros de nuestras herramientas, en el ejemplo es modulo.php, que responde a las url amigables modulo1 y modulo2.

Puedes ver un ejemplo de esta forma de trabajar en http://urlamigables.petralinkfactory.com

Y te puedes descargar el ejemplo desde: http://urlamigables.petralinkfactory.com/urlamigables.zip

Publicado en programación | Etiquetado , , , , | Deja un comentario

URLs Amigables (I)

En la actualidad el uso de URLs Amigables (o en inglés SEO URLs) se está expandiendo mucho puesto que Google te indexa mejor en las búsquedas.

En este post voy a explicar cómo hacer lo de las URLs amigables sin utilizar el módulo de Apache Rewrite y sin necesidad de ningún componente (para IIS).

Para empezar lo primero que tenemos que ver qué son las URLs amigables. Estas URLs son las direcciones pero sin parámetros. Por ejemplo este post tiene una dirección que es http://www.petralinkfactory.com/2008/04/27/url-amigables-i. Una URL "no amigable" sería http://www.petralinkfactory.com/?post=1234 (no creo que esta dirección funcione puesto que la he puesto de ejemplo).

El truco que voy a explicar es para programar nuestras propias páginas webs, para WordPress el propio sistema nos permite seleccionar las URLs amigables en las configuraciones de los post.

Ya que no tenemos el módulo Rewrite disponible, bien por que estamos en un hosting compartido (que ya es raro que ocurra) o bien puesto que nuestro hosting es Windows sobre IIS, el truco es usar una pequeña zapuza, el error 404.

Entonces el fichero de error 404 va a ser el encargado de recoger la url y hacer las acciones pertinentes para ejecutar la página que corresponda.

Esta técnica de usar el error 404 no es recomendable para gente que ya tenga programado un sitio web entero, puesto que tendréis que cambiar todas las páginas webs que querráis que tengan URL limpias, para adaptarlas a la forma de trabajar de las URL amigables.

Para la programación de las páginas públicas yo lo que hago es analizar la url de manera que a cada módulo de la web (agenda, noticias, secciones de texto, ...) le asigno un "controlador", que no es más que el nombre del módulo, para luego seguir con los "parámetros" que van a ser necesario para dicho módulo.

En el siguiente capítulo empezaré a poner ejemplos de código.

Publicado en programación | Etiquetado , , | Deja un comentario

Declaración de Intenciones

Hola a todos.

En primer lugar decir que este es mi primer post (nunca he posteado antes en ningún otro blog).

Decir que el blog intentaré escribir todos los días, sobre temas de programación orientada a la web, aunque algunas veces igual programaré también de programas de consola en tecnología .NET sobre Windows.

En este blog iré poniendo los experimentos y experiencias que voy a ir realizando para compartir el conocimiento.

Poco a poco iré modificando el blog, como por ejemplo realizar un tema personalizado a la imagen coorporativa que quiero dar, así como iré colocando mi porfolio y un pequeño currículum vitae.

Espero que pueda postear cosas interesantes.

Valde

Publicado en Personal | Etiquetado | Deja un comentario