我使用Java程序而不是iReport设计报告模板。
我想导出PDF文件,但是会导致如下异常。
java.lang.RuntimeException:ExceptionConverter:java.io.UnsupportedEncodingException: UniCNS-UCS2-H
at
com.claridy.toread.core.jsrsupport.ReportJob.execute(ReportJob.java:177) ~[toreadcore-4.4.0-SNAPSHOT.jar:na]
at
org.quartz.core.JobRunShell.run(JobRunShell.java:199) ~[quartz-1.7.2.jar:na]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:546) [quartz-1.7.2.jar:na]
com.lowagie.text.ExceptionConverter: UniCNS-UCS2-H
这是与该方法一起使用的pom.xml依赖项。
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>3.7.6</version>
<exclusions>
<exclusion>
<groupId>bouncycastle</groupId>
<artifactId>bcprov-jdk14</artifactId>
</exclusion>
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.claridy</groupId>
<artifactId>iText</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>com.claridy</groupId>
<artifactId>iTextAsia</artifactId>
<version>1.0</version>
</dependency>
iText和iTextAsia都包含UniCNS-UCS2-H.camp
这是我的代码的一部分,exporter.exportReport()导致异常。
private String exportPdf(String jrPrintFile, String fileName) throws Exception {
String outputFileName = fileName + ".pdf";
FileOutputStream fos = null;
try {
fos = new FileOutputStream(outputFileName);
JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.INPUT_FILE_NAME, jrPrintFile);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fos);
exporter.exportReport();
} catch (NullPointerException e) {
throw new ReportJobInterruptException();
} catch (Exception e) {
throw e;
} finally {
StreamUtils.close(fos);
try {
(new File(jrPrintFile)).delete();
} catch (Exception e) {
}
}
return outputFileName;
}
我已经设置了PdfEncoding和PdfEmbedded。
JRDesignStyle normalStyle = new JRDesignStyle();
normalStyle.setPdfEncoding(getDefaultParameter().getStringUse("JRDesignStyle.PdfEncoding"));
normalStyle.setPdfEmbedded(true);
textField = new JRDesignTextField();
textField.setPdfEmbedded(true);
textField.setPdfEncoding(getDefaultParameter().getStringUse("JRDesignStyle.PdfEncoding"));
PdfFontName:MHei-Medium
PdfEncoding:UniCNS-UCS2-H
以下报告模板的一部分:
<?xml version="1.0" encoding="UTF-8"?>
<style name="Arial_Bold" isDefault="true" hAlign="Left" vAlign="Top" isBlankWhenNull="true" fontName="Arial" fontSize="5" isBold="false" pdfFontName="MHei-Medium" pdfEncoding="UniCNS-UCS2-H" isPdfEmbedded="true"/>
<textField isBlankWhenNull="true">
<reportElement mode="Opaque" x="0" y="8" width="101" height="8"/>
<textElement textAlignment="Left" verticalAlignment="Top">
<font pdfEncoding="UniCNS-UCS2-H" isPdfEmbedded="true"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[String.valueOf($F{class21})]]></textFieldExpression>
</textField>
我已经尝试过将itext-asian覆盖到我的iTextAsia上,itextpdf也覆盖了我的itext-4.2.1。 但是问题仍然存在,我已经困惑了好几天。
如果有任何可以帮助我的信息,那将是很高兴的。
最诚挚的问候。