Java 在JasperReport中使用UTF-8创建印地语PDF

Java 在JasperReport中使用UTF-8创建印地语PDF,java,pdf,utf-8,jasper-reports,hindi,Java,Pdf,Utf 8,Jasper Reports,Hindi,我的要求是创建一个PDF,其中一些文本是印地语/马拉地语/其他印度语,而一些文本是英语 印地语/马拉地语/其他印度语文本将是Unicode(UTF-8)的静态文本,而英语文本将是静态和动态的。我在iReport 5.5.0中创建了一个jrxml文件。在iReport内部查看器中,它显示正确的输出。但是,在以pdf格式导出时,它根本不显示印地语文本。它只显示英文文本。在文档中导出时,印地语文本以正方形出现,我觉得这是单词设置问题。在HTML或RTF导出中,它可以完美地工作。当我使用Java代码创建

我的要求是创建一个PDF,其中一些文本是印地语/马拉地语/其他印度语,而一些文本是英语

印地语/马拉地语/其他印度语文本将是Unicode(UTF-8)的静态文本,而英语文本将是静态和动态的。我在iReport 5.5.0中创建了一个jrxml文件。在iReport内部查看器中,它显示正确的输出。但是,在以pdf格式导出时,它根本不显示印地语文本。它只显示英文文本。在文档中导出时,印地语文本以正方形出现,我觉得这是单词设置问题。在HTML或RTF导出中,它可以完美地工作。当我使用Java代码创建pdf/doc/html/rtf时,也会发生同样的事情。我在这里附上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文件是:



您是否使用了该机制?所有字符的字体都不需要更改。我唯一需要的是打印Unicode字符。我也需要使用字体扩展吗?如果是这样的话,你能举个例子说明我是如何做到这一点的吗?你可以阅读以下文章:&这已经解决了吗?我无法使用印地语内容呈现此文件