Ukraine (Cyrillic) characters not displaying in Ja

2019-01-18 23:31发布

问题:

I am trying to display ukranian character in jasper report as a pdf file. but it is not diaplaying in pdf format.

when I export report to all other format like html, csv..ukranian char is displaying.

回答1:

Set some text field properties at iReport. Use font DejaVu Sans. Set pdf encoding to Cp1251 and isPdfEmbedded to true.

Ex.: <font fontName="DejaVu Sans" isStrikeThrough="false" pdfEncoding="Cp1251" isPdfEmbedded="true" />

jasperreports fonts as maven dependency:

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-fonts</artifactId>
</dependency>


回答2:

First, make sure you have the right encoding:

JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");

Then you should change the fonts to ones that support cyrillic. This is done via styles:

public void addPdfFontsToStyles(JRStyle[] styles) {
    if (styles != null) {
        for (JRStyle style : styles) {
            if (style.getName().equals("reportStyle")) {
                style.setPdfFontName("/com/yourcompany/fonts/times.ttf");
                style.setBlankWhenNull(true);
            }

            if (style.getName().equals("reportBoldStyle")) {
                style.setPdfFontName("/com/yourcompany/fonts/timesbd.ttf");
                style.setBlankWhenNull(true);
            }

        }
    }
}

And invoke this method with addPdfFontsToStyles(jasperReport.getStyles());

Of course, the prerequisites are:

  • your text is using one of the above style names
  • you have the ttf files on the classpath

That should do it (I'm taking the code from a working cyrilic application)



回答3:

  1. register font in JVM

    Font myFont = Font.createFont(Font.TRUETYPE_FONT, new File("pathToCyrillicFont"));
    GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(myFont); 
    
  2. add to Cyrillic field this:

    <textElement>
       <font
                      fontName="fontName"
                      pdfFontName="pathToCyrillicFont"
                      size="13"
                      isBold="false"
                      isItalic="false"
                      isUnderline="false"
                      isPdfEmbedded ="true"
                      pdfEncoding ="Cp1251"
                      isStrikeThrough="false"
       /> 
     </textElement>
    

Enjoy!



回答4:

Since jasper report v5, v6 the correct way to display characters in pdf is to use font-extension

For more information see these question on stackoverflow:

Jasper Reports PDF doesn't export cyrillic values

How can I display "$£Ω€απ⅔" in Jasperserver PDF using iReport?