Nick Gun Nick Gun - 2 months ago 26
Java Question

Jasper Reports PDF doesn't export cyrillic values

I am trying to export jasper as pdf but It does not show the cyrillic values. When I export it as excel it does show and the output is fine, but when I try to export is as PDF it does not export the cyrillic values. The cyrillic values are not written in cyrillic font, they are written as cyrillic keyboard.

enter image description here

The code I use to export is:

JRExporter e = new JRPdfExporter();
e.setParameter(JRPdfExporterParameter.JASPER_PRINT, jasperPrint);
e.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, outStream);
e.setParameter(JRPdfExporterParameter.OUTPUT_FILE_NAME, NAME);


I even tried to specift the parameter below:

e.setParameter(JRPdfExporterParameter.CHARACTER_ENCODING, "UTF-8");


but did not succeed. Any suggestions?

Answer

Jasper report uses iText and always when a char is not rendered in pdf this should be the the checklist

  1. Is my actual .tff supported (OpenType) and can the font actually render the character. Not all fonts render all characters in UTF-8

  2. Do I pass correct encoding to iText. In doubts (or in general) use the encoding Identity-H this is recommend for newer PDF standards and gives you the ability to mix different encoding.

  3. Is my font embedded so that if I share the pdf also computers not having this font can display the content

So how can I ensure this is JasperReport?

The original deprecated method was to set attributes on the textElement

<textElement>
  <font pdfFontName="Helvetica" pdfEncoding="Identity-H" isPdfEmbedded="true"/>
  <paragraph lineSpacing="Single"/>
</textElement>

The current non deprecated method v 6, is to add Font Extensions and this is easily achieved using tools like iReport or JasperSoft Studio that can generate a .jar of your font extension so that you can include it in your classpath directly.

How to generate font extension .jar using iReport or JasperSoft Studio.

If you do not like to use external jars for you font extension you need in your project to:

  1. Add the desired .ttf
  2. Add a fontFamilies.xml defining the font
  3. Edit/Add jasperreports_extension.properties specifing the path to your fontFamiles.xml

For example please reefer to Jasper report font example

EDIT: The problem of OP was 1 on checklist (.ttf font could not render), but surely he should consider both 2 and 3 using non deprecated method.