Crear archivos PDF con caracteres Unicode
De
<keywords content="keywords"> PDF, archivo, FOP, reportes, reporte, reporte PDF, reportes PDF, archivos PDF, archivo PDF, documento, documentos PDF, documento PDF, archivos, caracteres, caracteres especiales, euro, japonés, árabe, glyph, UTF, UTF-8, japones, arabe, griego, chino, coreano, koreano, caracteres europeos, orientales, oriental, caracteres orientales, eslavo, eslavos, europa oriental, europa del este, font, alt, set de caracteres, unicode, caracteres unicode </keywords>
Contenido |
Cómo Crear Archivos PDF con caracteres Unicode
Introducción
El objetivo tratado en este artículo es generar un archivo PDF que soporte caracteres Unicode, para un proceso en Bizagi.
En otras palabras, lo que se cubre en este artículo es cómo crear un PDF con datos de negocio que contengan caracteres especiales que no hacen parte de los alfabetos tradicionales occidentales.
Estos caracteres Unicode incluyen los caracteres de aquellos idiomas como: japonés, chino, coreano, árabe, griego, ruso, y otros idiomas eslavos, entre otros.
Antes de comenzar
Debido a que el servicio web que está configurado inicialmente para generar el PDF no imprime los caracteres unicode (en cambio, símbolos "#"), vamos a ilustrar cómo crear y publicar un nuevo servicio web desarrollado en Java, que imprima dichos caracteres.
Para determinar si los caracteres que queremos incluir se contemplan dentro de los sets de caracteres especiales de Unicode, se recomienda revisar Las tablas de referencia de Códigos Unicode.
Tenga en cuenta que en Cómo crear Archivos PDF con Apache FOP.Net se presenta un procedimiento similar (pero más sencillo), dado que en dicho artículo se ilustra la creación de archivos PDF con soporte únicamente a los caracteres del alfabeto latino tradicional.
La diferencia entre los dos artículos se basa principalmente en el desarrollo del servicio web, que para este artículo se basa en el uso del componente de Apache FOP para código en Java.
Siga los pasos mencionados a continuación (aplican para las ediciones Enterprise y la edición Xpress de Bizagi), si desea incluir caracteres unicode en su archivo PDF, o incluso si su PDF actual imprime el símbolo de número ("#") donde deben ir los caracteres unicode.
En este ejemplo, se ilustrará como crear un PDF que contiene caracteres japoneses.
PDF sin soporte a Unicode:
PDF con soporte a Unicode:
Prerequisitos
1. Glassfish 3.0.1 (recomendado) instalado y configurado, o cualquier otro Servidor de Aplicación que soporte servicios web en Java.
Descargue Glassfish desde la página oficial de Glassfish.
La ruta donde Glassfish ha sido instalado, será mencionada en este artículo como "%GLASSFISH_HOME%".
2. Netbeans 6.9 (recomendado) instalado, o cualquier otro IDE para desarrollar proyectos en Java.
Descargue Netbeans desde la página oficial de Netbeans.org. La ruta donde se crean los proyectos de Netbeans, será mencionada en este artículo como "%WORKSPACE_PATH%".
3. Apache FOP 1.0 (o superior), en su versión para Java.
Este componente es requerido por el servicio web que se desarrollará en Java para crear el PDF a partir de un XML (en formato XLS-FO).
Puede descargar la distribución binaria en la página oficial del proyecto Apache FOP.
La ruta donde se extrae la estructura de la distribución de Apache FOP, será mencionada en este artículo como "%APACHEFOP_HOME%".
4. Soporte a Unicode de Acrobat Adobe Reader (para visualizar los PDF), al igual que las fuentes de Windows necesarias instaladas en el servidor para representar los caracteres especiales en cuestión.
Nota: Adobe Acrobat Reader puede detectar el "language package" que requiere instalar al intentar abrir un PDF que contiene caracteres Unicode.
Lo que debe hacer
Para generar PDFs con soporte a caracteres unicode, los siguientes pasos se llevan a cabo:
1. Configurando la fuente
2. Desarrollando el servicio web en Java
3. Configurando la invocación del servicio web en Bizagi
Ejemplo
Este ejemplo fue trabajado con el proceso Purchase Request process ("Solicitud de Compras"), disponible para instalación desde el Process Central gratuito y sus plantillas.
El archivo PDF que se genera en este ejemplo, es creado en la actividad de servicio Create PDF Purchase order ("Crear PDF de Orden de compra") del subproceso Purchase Order ("Orden de compra").
De esta manera, este nuevo servicio web que crearemos será invocado en vez del que está publicado en "http://www.Bizagi.com/ESB/ESBServices.asmx" (para esta plantilla de proceso).
Configurando la fuente
Para definir que el componente Apache FOP utilice una fuente que contenga determinados set de caracteres unicode, se requiere configurar la instanciación de dicha fuente involucrando estos 3 pasos menores:
la idenficación de la fuente que contiene dichos caracteres especiales en el servidor, la generación del archivo de métricas de la fuente y su referenciación, y la edición del archivo de transformación XLS-FO.
Alerta: En las versiones de Apache FOP 0.94 y superiores, algunas fuentes no necesitan de los 3 pasos (específicamente del paso de registro de la fuente por medio del archivo de métricas). Sin embargo, se recomienda garantizar la configuración de la fuente realizando los 3 pasos como se indican a continuación. |
Identificando la fuente que contiene los caracteres especiales en el servidor
El propósito de este paso es idenficar a nivel de Windows, la fuente que representa correctamente los caracteres unicode que queremos imprimir en el archivo PDF.
Para ello, podemos utilizar la aplicación de mapa de caracteres de Windows ("Character map"):
Una vez hayamos identificado la fuente (para nuestro ejemplo de caracteres japoneses, la fuente es "MS Gothic"), podemos consultar el nombre del archivo ".ttc" que contiene la información para los símbolos del idioma japonés.
Dicho archivo .ttc en Windows, suele ubicarse en "C:\Windows\Fonts".
Nótese que es aconsejable consultar el nombre del archivo desde una consola de comandos (en vez de usar un explorador en Windows).
La razón es que de esta manera consultamos fácilmente el nombre real del archivo.
Generando el archivo de métricas de la fuente y su referenciación
Sabiendo ya el nombre del archivo orígen de la fuente, nuestro siguiente paso es generar un archivo de métricas para su referenciación desde el componente Apache FOP.
Este paso registra la fuente para que ésta se pueda utilizar desde un archivo de configuración FOP al momento de crear el PDF.
Digitamos el siguiente comando en una consola de comandos desde la ruta %APACHEFOP_HOME%: java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging-1.0.4.jar;lib\commons-io-1.3.1.jar;lib\xmlgraphics-commons-1.4.jar org.apache.fop.fonts.apps.TTFReader -ttcname "MS Gothic" C:\Windows\Fonts\msgothic.ttc C:\Temp\msmsgothic.xml
Nótese que las librerías (.jar) de referencia usadas en la ejecución: "commons-logging", "commons-io", y "xmlgraphics-commons" se encuentran incluídas en la distribución del componente APACHE FOP (vienen en la carpeta "%APACHEFOP_HOME%\lib").
Por lo tanto, se debe garantizar que el comando anterior especifique el nombre completo del .jar (con el número de versión), correspondiente a la distribución de Apache FOP descargada.
En el comando de nuestro ejemplo, guardamos el archivo de métricas como "C:\Temp\msmsgothic.xml".
Para referenciar el archivo de métricas que acabamos de crear, basta con incluir su ubicación en un archivo de configuración de FOP.
Nuestro archivo de configuración de FOP es "C:\Temp\mycfg.xml" y lo creamos duplicando el archivo plantilla que se encuentra en "%APACHEFOP_HOME%\conf".
Edite el archivo de configuración de FOP como se enseña a continuación:
Alerta: Se debe tener en cuenta que los archivos de transformación XSL-FO usados con versiones antiguas de Apache FOP (anteriores a 0.94), no siempre son interpretables por las versiones de Apache FOP superiores a 0.94, debido a nuevas validaciones que se incluyeron el en proyecto Apache FOP. Por lo anterior, se debe consultar la Referencia de migración Apache FOP y deshabilitar las nuevas validaciones de ser necesario. |
En nuestro ejemplo, hemos especificado en el archivo de configuración FOP que se deshabiliten las nuevas validaciones (debido a que este XLS-FO era compatible con la versión 0.20 de Apache FOP).
Encuentre en las Preguntas Frecuentes del proyecto Apache FOP mayor detalle y explicación sobre los pasos mencionados y sus aclaraciones.
Editando el archivo de transformación XSL-FO
Dado que ya hemos definido cuál es la fuente que utilizaremos para nuestro PDF y hemos configurado lo necesario para poder referenciarla con el componente Apache FOP, procedemos a definir qué campos en el archivo XSL-FO tendrán caracteres unicode en el XML de información que envía Bizagi.
Así podremos garantizar que los símbolos del set de caracteres especiales sean buscados en la fuente correcta.
Para editar el archivo de transformación XLS-FO, incluímos el atributo "font-family" dentro de los nodos "<fo:block>", "<fo:text>", y/o "<fo:inline>" donde sabemos que se deben representar los caracteres unicode. En nuestro ejemplo, la familia de fuentes es "MS Gothic" (font-family="MS Gothic").
Finalmente, guardamos este archivo codificado como "UTF-8" especialmente si el mismo archivo de transformación XLS-FO contiene caracteres unicode.
Para este ejemplo hemos usado el mismo archivo de transformación XLS-FO que estaba ya incluído como paramétro de entrada (input), en la configuración inicial de la tarea de servicio Create PDF Purchase order ("Crear PDF de Orden de compra").
Desarrollando el servicio web en Java
En este punto ya hemos completado los pasos relacionados con el setup de la fuente para los caracteres especiales unicode.
Ahora ilustraremos el desarrollo del servicio web en Java que crea el PDF a partir del XML que envia Bizagi, usando el archivo de configuración FOP que contiene la ubicación de la fuente a utilizar.
En este ejemplo, el servicio web se desarrolló en Netbeans 6.9 y nuestro proyecto se llama "Web Application1" (creado en la ruta de los proyectos Netbeans : %WORKSPACE_PATH%).
La estructura del proyecto se muestra a continuación:
La clase "NewWebService1.java" contiene el método web para crear el PDF:
Nótese que usamos la codificación apropiada para unicode ("UTF-8") y que instanciamos el archivo de configuración de FOP:
La cadena (string) de retorno del método contiene formato XML (con la estructura del modelo de datos de nuestro proceso de Solicitud de Compras), ya que éste lo recibirá Bizagi y así mismo actualizará el archivo PDF de acuerdo a como se define (Subir archivos usando la Capa SOA).
Descargue aquí el desarrollo en Java completo.
Publicando el servicio web (en Glassfish)
Una vez que nuestro proyecto compila correctamente y resulta en un archivo ".war", hacemos desplique del archivo .war file en el Servidor de Aplicaciones Java (Glassfish).
Para este ejemplo, nuestro archivo de despliegue es "WebApplication1.war" y nuestro servicio web está en la clase "NewWebService1.java". Glassfish se instaló bajo el puerto 8080.
Puntualmente, la publicación del servicio web lo hacemos:
- Ubicando el archivo .war en la ruta de nuestro proyecto (WebApplication1.war) bajo la carpeta "dist" ("%WORKSPACE_PATH%\WebApplication1\dist").
- Copiando ese archivo WebApplication1.war hacia la carpeta de despliegue automático de Glasshfish ("%GLASSFISH_HOME%\glassfish-3.0.1\glassfish\domains\domain1\autodeploy"). Tenga en cuenta que esta es sólo una manera de realizar el despliegue en Glassfish. Glassfish hará el despliegue del contenido de la carpeta "autodeploy" tan pronto suba el servicio y se encargará de generar los archivos necesarios para la publicación del servicio web (por ejemplo, el wsdl).
- Iniciando (o reiniciando) el servicio de dominio del servidor Glassfish. Esto se puede llevar a cabo desde una consola de comandos desde el bin de Glassfish ("%GLASSFISH_HOME%\glassfish-3.0.1\glassfish\bin\") digitando: "asadmin start-domain domain1".
Si se requiere reiniciar Glassfish, ésto se hace deteniendo/iniciando el servicio.
Para detener el servicio, se digita en la consola de comandos: "asadmin stop-domain domain1".
Para revisar que Glassfish ha subido correctamente y se ha completado el despliegue de nuestro WebApplication1.war, se puede acceder al wsdl del servicio web digitando en un explorador de internet: "http://localhost:8080/WebApplication1/NewWebService1Service?wsdl". La disponibilidad de este archivo en la URL nos indicará que nuestro servicio web está publicado.
Configurando la invocación del servicio web en Bizagi
Ahora que tenemos publicado nuestro servicio web, podemos invocarlo desde Bizagi realizando la configuración a través del asistente de interfaces de Bizagi Studio.
Para ello, seleccionamos el sexto paso del asistente de proceso ("Integrar"). Redefinimos la configuración para que en la tarea de servicio Create PDF Purchase order ("Crear PDF de Orden de compra") se instancie la URL de nuestro nuevo servicio web "http://%GLASSFISH_SERVER%:%GLASSFISH_PORT%/WebApplication1/NewWebService1Service?wsdl".
Recuerde que para esta configuración, se requiere definir para los parámetros de entrada (input): la selección de la información del esquema de nuestro proceso, y la inclusión del archivo de transformación XLS-FO para dicho esquema (como también se detalla aquí).
Seleccionamos los siguientes campos en el esquema, para extraer su información:
Cargamos el archivo de transformación XLS-FO:
Recordemos que para este ejemplo, el string de respuesta del servicio web (en formato XML) está adaptado con la estructura de nuestro modelo de datos (del proceso Solicitud de Compras). Por lo tanto, no es necesaria configuración adicional para los parámteros de salida (output) de la invocación.
Bizagi actualizará automáticamente el archivo PDF que nos retorna el servicio web al atributo Purchase Order File ("Archivo de Orden de compra").
En el último paso, haga clic en "Terminar".
Ejecución
En este punto, ya hemos configurado nuestro proceso de Solicitud de Compras, para que genere los PDF con soporte a caracteres Unicode.
Para ver su creación, ejecute el proceso en el portal de trabajo de Bizagi:
Temas Relacionados
- Cómo crear Archivos PDF con soporte únicamente de los caracteres tradicionales.
- Bizagi ofrece un modo de generar archivos RTF configurando una plantilla: aprenda aquí sobre las Cartas de Bizagi.
- Subir archivos usando la Capa SOA.
- Para las ediciones Enterprise, hay otra manera de crear los archivos PDF: aprenda aquí sobre la Librería de Componente.
Lea mayor detaille e información sobre la configuración avanzada de fuentes (fonts) con Apache FOP en este enlace externo:
<comments />