Создание PDF-файла на хинди с использованием UTF-8 в JasperReport

Мое требование состоит в том, чтобы создать PDF-файл с текстом на хинди/маратхи/другом индийском языке и текстом на английском языке.

Текст на хинди/маратхи/другом индийском языке будет статическим текстом в Юникоде (UTF-8), а текст на английском языке будет статическим и динамическим. Я создал файл jrxml в iReport 5.5.0. В iReport Internal Viewer отображаются правильные выходные данные. Однако при экспорте в pdf текст на хинди вообще не отображается. Он показывает только английский текст. При экспорте в документ текст на хинди появляется в виде квадратов, что, как мне кажется, связано с настройкой слов. При экспорте в HTML или RTF работает отлично. То же самое происходит, когда я создаю pdf/doc/html/rtf с помощью кода Java. Я прикрепляю файлы Java и jrxml сюда для справки.

public class TestHindiPDF {
    public static void main(String[] args) throws Exception {

        String strJasperFilePath = null;
        String strJRXMLFilePath = null;
        String strReportPath = "D:\\Chintan\\Tech\\Input_Files\\TestMulti";
        String strSaveReportPath = "D:\\Chintan\\Tech\\Input_Files\\TestMulti";
        String strReportName = "multi1";

        strJasperFilePath = strReportPath + "/multi1.jasper";
        strJRXMLFilePath = strReportPath + "/multi1.jrxml";
        strReportName = "multi1";

        File reportFile = new File(strJasperFilePath);//your report_name.jasper file
        if (!reportFile.exists()) {
            try {
                System.out.println("Compiling JRXML File : " + strJRXMLFilePath);
                JasperCompileManager.compileReportToFile(strJRXMLFilePath, strJasperFilePath);
                reportFile = new File(strJasperFilePath);
            } catch (JRException e) {
                e.printStackTrace();
            }
        }

        if (reportFile != null) {
            OutputStream fileOut = null;
            try {
                JasperReport jasperReport = (JasperReport) JRLoader.loadObject(reportFile);

                JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, new JREmptyDataSource());

                JRExporter exporter2 = new JRRtfExporter();
                exporter2.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
                exporter2.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
                exporter2.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, strSaveReportPath + "/" + strReportName + ".rtf");
                exporter2.exportReport();

                JRExporter exporter3 = new JRHtmlExporter();
                exporter3.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
                exporter3.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
                exporter3.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, strSaveReportPath + "/" + strReportName + ".html");
                exporter3.exportReport();

                JRExporter exporter4 = new JRDocxExporter();
                exporter4.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
                exporter4.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
                exporter4.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, strSaveReportPath + "/" + strReportName + ".docx");
                exporter4.exportReport();

                JRExporter exporter1 = new JRPdfExporter();
                exporter1.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8");
                exporter1.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
                exporter1.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, strSaveReportPath + "/" + strReportName + ".pdf");
                exporter1.exportReport();


                JasperExportManager.exportReportToPdfStream(jasperPrint, fileOut);
            } catch (JRException e) {
                e.printStackTrace();
            } finally {
                if (fileOut != null) {
                    fileOut.close();
                }
            }
        }
    }
}

Файл 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="multi1" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="c8a053f6-858e-427b-aec1-89231aadddd6">
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch">
            <staticText>
                <reportElement x="104" y="0" width="313" height="25" uuid="fa5e3e6e-26f7-4973-a2d5-3c3b7a5e8227"/>
                <textElement textAlignment="Center">
                    <font size="16"/>
                </textElement>
                <text><![CDATA[अतिदेय राशि के पुनर्भुगतान हेतु अनुस्मारक]]></text>
            </staticText>
            <staticText>
                <reportElement x="132" y="25" width="252" height="25" uuid="fa5e3e6e-26f7-4973-a2d5-3c3b7a5e8227"/>
                <textElement textAlignment="Center">
                    <font size="16"/>
                </textElement>
                <text><![CDATA[Reminder for repaying Overdue Amount]]></text>
            </staticText>
        </band>
    </title>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="61" splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band height="125" splitType="Stretch"/>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch"/>
    </summary>
</jasperReport>

person Chintan Adhia    schedule 03.02.2014    source источник
comment
Использовали ли вы механизм расширений шрифтов?   -  person Alex K    schedule 04.02.2014
comment
Шрифты ни для одного из символов менять не нужно. Единственное, что мне нужно, это печатать символы Unicode. Нужно ли мне использовать расширения шрифтов для того же самого? Если да, можете ли вы привести пример того, как я могу это сделать?   -  person Chintan Adhia    schedule 04.02.2014
comment
Вы можете прочитать эти сообщения: Использовать пользовательские шрифты при создании pdf с помощью iReport и Внешний шрифт iReport   -  person Alex K    schedule 04.02.2014
comment
Это было решено? Я не могу отобразить этот файл с содержанием хинди   -  person S_S    schedule 08.06.2017