Java 在JasperReport中使用UTF-8创建印地语PDF
我的要求是创建一个PDF,其中一些文本是印地语/马拉地语/其他印度语,而一些文本是英语 印地语/马拉地语/其他印度语文本将是Unicode(UTF-8)的静态文本,而英语文本将是静态和动态的。我在iReport 5.5.0中创建了一个jrxml文件。在iReport内部查看器中,它显示正确的输出。但是,在以pdf格式导出时,它根本不显示印地语文本。它只显示英文文本。在文档中导出时,印地语文本以正方形出现,我觉得这是单词设置问题。在HTML或RTF导出中,它可以完美地工作。当我使用Java代码创建pdf/doc/html/rtf时,也会发生同样的事情。我在这里附上Java和jrxml文件以供参考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代码创建
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字符。我也需要使用字体扩展吗?如果是这样的话,你能举个例子说明我是如何做到这一点的吗?你可以阅读以下文章:&这已经解决了吗?我无法使用印地语内容呈现此文件