style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

problema de estilo y fuente al generar pdf en jasperreport

Hola javamexico, agradezco la ayuda sobre el siguiente tema.

Estoy iniciándome con jasperreport y ya he logrado hacer un reporte sencillo, pero he tenido un inconveniente con los tipos de letra, específicamente la fuente Calibri.

Yo diseñé mi reporte con iReport 4.6.0 y a todos los textos estáticos ( Static Text ) y Text Field de parametros (parameter) y campos (field) les configuré mediante el editor gráfico que tuvieran el estilo Calibri, de tamaños que varian de 10, 11 y 14. La herramienta gráfica genera en el xml el siguiente código:::

...
<staticText>
                                <reportElement uuid="28c39745-cc60-4c0f-93bd-4f9c7ca193ba" x="0" y="0" width="74" height="18"/>
                                <textElement verticalAlignment="Top">
                                        <font fontName="Calibri" size="14" isBold="true"/>
                                </textElement>
                                <text><![CDATA[CLIENTE]]></text>
                        </staticText>
...

en la etiqueta font especifica con la propiedad fontName que el tipo de letra es Calibri. Hasta aquí todo entendible.

Luego al procesar con java el archivo .jrxml lanzo la previsualización del archivo pdf generado con el código

JasperViewer.viewReport(jasperPrint, false);

y puedo ver que todo está bien con respecto al tipo de letra.... pero cuando busco el archivo PDF generado me doy cuenta que no tiene el estilo Calibri... tiene es uno por defecto.

Estuve buscando una posible solución y vi que se puede hacer esto:::

<staticText>
                                <reportElement uuid="4217c8bd-6cbc-47ca-91ac-9e3d3b5cf99d" x="0" y="0" width="272" height="20"/>
                                <textElement>
                                        <font pdfFontName="C:\\rutaruta\\Calibrib.ttf" fontName="Calibri" size="14" isBold="true" isPdfEmbedded="true"/>
                                </textElement>
                                <text><![CDATA[INFORMACION]]></text>
                        </staticText>

Se utiliza la propiedad pdfFontName indicandole la ruta completa donde está la fuente. Esto funciona pero no es una solución elegante. Además que la propiedad pdfFontName está "deprecated".

En un nuevo intento un poco menos "no elegante" creé un archivo .jar con las fuentes .ttf, las añadí a las librerías externas de mi proyecto en eclipse y modifiqué mi archivo xml así:

<staticText>
                                <reportElement uuid="8cd3789d-2b28-48b9-939b-251ad7e526ac" x="0" y="34" width="272" height="14"/>
                                <textElement>
                                        <font pdfFontName="Calibrib.ttf" size="11" isBold="true"/>
                                </textElement>
                                <text><![CDATA[Una direccion]]></text>
                        </staticText>

de vuelta utilizo la propiedad pdfFontName que está "deprecada", solo que ahora no le incluyo la ruta completa del archivo........ aunque si especifico la extensión del archivo (.ttf)

Bueno, hasta aquí menciono las soluciones que he encontrado para mi problema... pero quería pedirles ayuda para saber cual sería la manera correcta de trabajar con las fuentes y sus estilos.

Por ahí intenté también hacer esto:

<staticText>
                                <reportElement uuid="f272fcc0-f201-4f18-b2c8-88ce0c6bf6ab" x="0" y="62" width="272" height="14"/>
                                <textElement>
                                        <font fontName="Calibri.ttf" size="11" isBold="true"/>
                                </textElement>
                                <text><![CDATA[TEL: 301 215 13 86  -    3114804598]]></text>
                        </staticText>

osea, utilizar la propiedad fontName y tratando de invocar a Calibri.ttf y esto me genera el siguiente error:

net.sf.jasperreports.engine.util.JRFontNotFoundException: Font 'Calibri.ttf' is not available to the JVM. See the Javadoc for more details.

siguiendo una información que encontré añadí las fuentes .ttf de Calibri a la ruta:::

C:\Program Files\Java\jre7\lib\fonts
y
C:\Program Files\Java\jdk1.7.0\jre\lib\fonts

e intenté de nuevo pero falló de nuevo, incluso cambiando la asignación a fontName por fontName="Calibri"

Bueno, hasta aquí llegué hoy, son las 12:31 en Colombia y me falta sueño jejeje Zzz ... Z...zzz zzz ... oh wait!!! que me quedó dormido....
amigos de javamexico, agradezco me ayuden para saber la manera correcta para que el pdf que genere tenga bien su estilo de letra sin utilizar métodos o propiedades "deprecated"

de antemano muchas gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de samz550a

Rectificaciones.

Buenas java mexico.

Debo rectificar que realmente la forma en que me funcionó lo que estoy probando con jasperreport es cuando a la propiedad pdfFontName le indico la ruta completa donde tengo almacenada la fuente a utilizar.

las demás formas me funcionaban antes porque en mi intento de que funcionara había copiado los archivos .ttf (fuentes) en varias carpetas de java, eclipse de forma que de alguna forma las tomaba y "funcionaba".

Aclaro esto porque me dediqué a limpiar el sistema de mi duplicación de fuentes .ttf en varias carpetas y mi prueba dejó de funcionar de todas las formas que intenté excepto cuando a la propiedad pdfFontName le indico la ruta completa donde tengo almacenada la fuente a utilizar.

Un saludo.

Imagen de samz550a

Solución Parcial. Ayuda!!!

Lo que se indica en este enlace me funcionó parcialmente... hay algunos tipos de letra que al empaquetarlos en .jar y al añadirlo al classpath de mi proyecto en eclise, al compilar lanza errores...

http://javaskeleton.blogspot.com/2010/12/embedding-fonts-into-pdf-genera...

Empaquetando con iReport el tipo de letra Calibri funciona bien al compilar mi ejemplo en eclipse... pero no me funciona al empaquetar Rockwell , cuando voy a compilar me lanza la excepción:::

Exception in thread "main" java.lang.ExceptionInInitializerError
at net.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:121)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:88)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:103)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:61)
at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:153)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:82)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:969)
at reporte.JasperReport2.main(JasperReport2.java:48)
Caused by: net.sf.jasperreports.engine.JRRuntimeException: java.awt.FontFormatException: java.nio.BufferUnderflowException
at net.sf.jasperreports.engine.fonts.SimpleFontFace.(SimpleFontFace.java:105)
at net.sf.jasperreports.engine.fonts.SimpleFontFace.(SimpleFontFace.java:129)
at net.sf.jasperreports.engine.fonts.SimpleFontFace.getInstance(SimpleFontFace.java:68)
at net.sf.jasperreports.engine.fonts.SimpleFontFamily.setNormal(SimpleFontFamily.java:99)
at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.parseFontFamily(SimpleFontExtensionHelper.java:261)
at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.parseFontFamilies(SimpleFontExtensionHelper.java:232)
at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.loadFontFamilies(SimpleFontExtensionHelper.java:193)
at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.loadFontFamilies(SimpleFontExtensionHelper.java:162)
at net.sf.jasperreports.engine.fonts.FontExtensionsRegistry.getExtensions(FontExtensionsRegistry.java:56)
at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getExtensions(DefaultExtensionsRegistry.java:110)
at net.sf.jasperreports.engine.util.JRStyledTextParser.(JRStyledTextParser.java:83)
... 9 more
Caused by: java.awt.FontFormatException: java.nio.BufferUnderflowException
at sun.font.TrueTypeFont.init(Unknown Source)
at sun.font.TrueTypeFont.(Unknown Source)
at sun.font.SunFontManager.createFont2D(Unknown Source)
at java.awt.Font.(Unknown Source)
at java.awt.Font.createFont(Unknown Source)
at net.sf.jasperreports.engine.fonts.SimpleFontFace.(SimpleFontFace.java:101)
... 19 more

¿Alguien tiene alguna idea de que sucede y como solucionarlo?

Importación de fonts

Hola samz550 , encontraste solución a tu problema de cargado de la letra tipo colibrí ?
si es sí, me gustaría que compartieras tu solución
Gracias :D
Pd. Estoy con googleando si encuentro algo lo comparto :)

Tengo el mismo problema de la fuente

Alguien tendra alguna solucion para el problema o sabe si hay algun paquete de fuentes para instalar aparte para la solucion de este problema???

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">