Search code examples
javafontsjasper-reports

How to display Vietnamese in PDF what exported by Jasper report correctly?


I am using these dependencies

implementation ('net.sf.jasperreports:jasperreports:6.9.0')
implementation ('net.sf.jasperreports:jasperreports-fonts:6.9.0')
implementation ('net.sf.jasperreports:jasperreports-functions:6.9.0')
implementation ('net.sf.jasperreports:jasperreports-metadata:6.9.0')
implementation ('net.sf.jasperreports:jasperreports-fonts:6.9.0')
implementation ('net.sf.jasperreports:jasperreports-annotation-processors:6.9.0')
implementation ('net.sf.jasperreports:jasperreports-chart-themes:6.9.0')
implementation ('net.sf.jasperreports:jasperreports-chart-customizers:6.9.0')
implementation ('net.sf.jasperreports:jasperreports-custom-visualization:6.9.0')
compile 'com.lowagie:itext:2.1.7.js5'

with Jasper report for Eclipse 2019.6 . Vietnamese character display in error

Java code

@RequestMapping(value = "/ca_audit/minute_pdf", method = RequestMethod.GET)
public void generatePDFCashAuditMinute() throws JRException {
    JasperReport jasperReport = JasperCompileManager.compileReport("D:/vy/template.jrxml");
    Map<String, Object> parameters = new HashMap<>();
    parameters.put("p1", "Example joint stock company"); // Tên tổ chức
    parameters.put("p2", "EXKK002"); // Số biên bản
    parameters.put("p3", 26); // Ngày
    JRDataSource jrDataSource = new JREmptyDataSource();
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jrDataSource);
    JasperExportManager.exportReportToPdfFile(jasperPrint, "D:/foo/out.pdf");
}

The content of file *.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="bien_ban_kiem_ke_quy_a4" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="7098c966-5c92-43e3-a729-b3d486fc858b">
    <parameter name="p1" class="java.lang.String"/>
    <parameter name="p2" class="java.lang.String"/>
    <parameter name="p3" class="java.lang.Integer"/>
    <queryString>
        <![CDATA[select 1 as id]]>
    </queryString>
    <field name="id" class="java.lang.Integer"/>
    <title>
        <band height="84" splitType="Stretch">
            <textField>
                <reportElement x="14" y="6" width="100" height="30" uuid="2106c35d-3d5e-4203-950a-54a87b6952ea"/>
                <textElement>
                    <font fontName="Arial"/>
                </textElement>
                <textFieldExpression><![CDATA[$P{p1}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="376" y="23" width="64" height="16" uuid="77d41a67-82d2-46d0-9a3e-5327ae3b450b"/>
                <text><![CDATA[Số biên bản:]]></text>
            </staticText>
            <textField>
                <reportElement x="440" y="23" width="50" height="16" uuid="a505da46-48af-4dcb-84bc-f9d27697919d"/>
                <textFieldExpression><![CDATA[$P{p2}]]></textFieldExpression>
            </textField>
            <staticText>
                <reportElement x="260" y="47" width="34" height="13" uuid="541c25ed-4b29-4cc4-a19d-05f295ae0340"/>
                <text><![CDATA[ngày]]></text>
            </staticText>
            <textField>
                <reportElement x="290" y="47" width="40" height="13" uuid="72e64426-d702-4694-bc25-81a2f3e43f82"/>
                <textFieldExpression><![CDATA[$P{p3}]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>

I create file jasperreports.properties in classpath enter image description here

In Eclipse IDE (with Jaspersoft module) enter image description here

How to fix it?


Solution

  • It's a font issue. Not a PDF encoding problem. Maybe try to use Arial Unicode MS

    Inside your tag add the following

    <font fontName="Arial Unicode MS" size="11" pdfFontName="Arial Unicode MS" pdfEncoding="Identity-H"/> 
    

    Also make sure that Arial font extension jar in class path. Search internet for arial font extension jar.