Exportar PDF multilenguaje con JasperReport
Introducción
En anteriores tutoriales disponibles en Adictosaltrabajo.com
se habla de iReport
(http://jasperforge.org/sf/projects/ireport),
una herramienta que nos ayuda a diseñar visualmente informes
(.jrxml)
para posteriormente poder usarlos con JasperReport (http://jasperreports.sourceforge.net).
JasperReport compilará el informe, lo
rellenará y posteriormente lo exportará
a un documento (pdf, doc, csv, xls, rtf, odt, etc).
Actualmente existe en Adictosaltrabajo.com
un tutorial donde se explica cómo poder exportar un
informe multilenguaje a PDF usando iReport (https://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=ireportMultilanguage).
Pero, ¿qué pasa si no utilizamos
iReport? ¿cómo creamos nuestro informe multilenguaje y lo
exportamos?
Este tutorial se centrará en solucionar los
posibles errores a la hora de exportar textos en árabe
(también podría valer para la gran
mayoría de los idiomas) a PDF. Dejaremos para otro
tutorial el cómo crear un informe «a mano« sin usar
herramientas visuales como iReport….
Entorno de trabajo
Ejemplo
Como se comenta en el tutorial de cómo exportar PDF
multilenguaje con iReport (https://adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=ireportMultilanguage)
la solución a nuestro problema es poner en el
atributo «pdfFontName»
la fuente (por ejemplo ARIAL.TTF)
y en «pdfEncoding»
el tipo de codificación «Identity-H«.
También habría que colocar la fuente usada (ARIAL.TTF) en el classpath de la
aplicación.
En caso de no usar iReport y crear nuestro informe «a mano» con
JasperReport esta solución se implementaria de la siguiente
manera…
Existen dos formas de hacerlo:
1 Crear un estilo y añadirlo
al objeto (<staticText>,<textField>,etc…)
donde aparezca el texto en árabe.
2 Crear una nueva fuente y añadirla al objeto.
Solución 1
Vamos a crear un estilo sencillito utilizando la fuente ARIAL.TTF…
JasperDesign jasperDesign = new JasperDesign();
….
….
JRDesignStyle normalStyle = new JRDesignStyle();
normalStyle.setName(«Arial_Normal»);
normalStyle.setDefault(true);
normalStyle.setFontName(«Arial»);
normalStyle.setFontSize(12);
normalStyle.setPdfFontName(«ARIAL.TTF»);
normalStyle.setPdfEncoding(«Identity-H»);
normalStyle.setPdfEmbedded(true);
jasperDesign.addStyle(normalStyle);
…
…
Una vez creado el estilo lo añadimos al objeto staticText.
staticText = new JRDesignStaticText();
staticText.setX(100);
staticText.setY(30);
staticText.setWidth(150);
staticText.setHeight(15);
staticText.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_RIGHT);
staticText.setStyle(normalStyle);
staticText.setText(«مشف ن وشمخأ»);
band.addElement(staticText);
jasperDesign.setColumnHeader(band);
…
…
Solución 2
Vamos a crear una nueva fuente y la añadimos al objeto staticText…
JasperDesign jasperDesign = new JasperDesign();
….
….
staticText = new JRDesignStaticText();
staticText.setX(245);
staticText.setY(30);
staticText.setWidth(150);
staticText.setHeight(15);
staticText.setHorizontalAlignment(JRAlignment.HORIZONTAL_ALIGN_RIGHT);
font = new JRDesignReportFont();
font.setPdfEmbedded(true);
font.setPdfFontName(«cour.ttf»);
font.setPdfEncoding(«Identity-H»);
font.setFontSize(12);
staticText.setFont(font);
staticText.setText(«مشف ن وشمخأ»);
band.addElement(staticText);
jasperDesign.setColumnHeader(band);
…
…
Aquí dejo un sencillo programa Java (prueba.java) que se encarga de crear un informe básico con textos en español y árabe, compilarlo y exportarlo a PDF. Recordad que las fuentes utilizadas (cour.ttf y arial.ttf) en el informe deben colocarse en el classpath de la aplicación.
El resultado final es un PDF como este (InformeMultiLenguaje.pdf)…
Conclusión
Como véis, la exportación de informes en diferentes idiomas
con JasperReport no es particularmente
complicado. Nosotros, los miembros de Autentia,
intentamos acercaros ese conocimiento a través de nuestros
tutoriales. Pero si la solución a vuestros problemas no se
encuentra en
www.AdictosAlTrabajo.com, ya sabéis que
podéis poneros en contacto con nosotros para que os
asesoremos y formemos.
Hola alfonso, perdona, pero no sé donde ni a quién dirigirme. Conseguí, gracias a alguno de tus tutoriales integrar java en php mediante javabridge y hacer llamadas a reportes diseñados con ireport. Todo va perfecto, pero quiero encriptarlos. He buscado la forma mediante código pero no lo he conseguido. La versión 3.6.0 de ireport dispone en sus opciones la posibilidad de encriptar y establecer permisos para el PDF, pero al compilarlo da errores, solo cuando le digo que lo encripte. ¿sabrías decirme qué puedo hacer? infinitas gracias. sagatz@msn.com
Quedé sorprendido de la buena organización y auto-organización, la cantidad/calidad de asistentes y el interés y naturalidad de todo el mundo.
Solo se puede felicitar y dar las gracias al equipo promotor/organizador del evento.
Me ha quedado una cosa clara: gente como la que ha asistido a este evento es la gente de la que quiero estar cerca: gente que te hace pensar, de la que aprender y con la que recorrer el camino del conocimiento.
Cada día estoy más contento de participar y apoyar estas iniciativas.
Es algo curioso, cuanto más arriba en la pirámide de la empresa menos definido el trabajo. Yo trabajo de administrativa a pesar de ser \\\»casi\\\» ingeniera informática, \\\»casi\\\» porque me falta presentar el proyecto final de carrera y puedo dar una lista detallada de mis tareas, mi jefe directo tiene una lista más difusa y si vamos subiendo en la estructura al final llegamos a ¿pero fulanito a que se dedica?. Los de abajo hacemos tareas concretas y los de arriba deben controlar, planificar, y eso puede significar muchas cosas.
Es un muy buen tutorial para ganar conocimientos…..pero yo tengo un pequeño problema trabajo con netbeans 6.1 y este trae acoplado el ireport 3.1 lo ke yo estoy asiendo es pasar un codigo(1-07211)a mi reporte, pero que este codigo se muestre con la fuente de codigo de barras lo cual funeciona en el ireport pero a la hora de exportar al pdf no me reconoce la fuente de codigo de barras y me muestra el codigo normal(1-07211),intente varias cosas ya para tratar de de ke al exportar me reconosca la fuente pero aun nada espero alguien pueda darme una solucion si no es mucho pedir graciassss