Ukraine (Cyrillic) characters not displaying in Jasper Report PDF

前端 未结 4 987
一向
一向 2020-12-10 13: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,

相关标签:
4条回答
  • 2020-12-10 13:47

    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?

    0 讨论(0)
  • 2020-12-10 13:53
    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!

    0 讨论(0)
  • 2020-12-10 13:59

    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)

    0 讨论(0)
  • 2020-12-10 14:05

    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>
    
    0 讨论(0)
提交回复
热议问题