Я использовал 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.
Однако проблема все еще там, я путал в течение нескольких дней.
Я был бы рад, если бы была какая-либо информация, которая может мне помочь.
С наилучшими пожеланиями.