読者です 読者をやめる 読者になる 読者になる

jassperreports で日本語が出力されなくて苦労した

jasperreports-5.6.0 を使用、
jasperreports で必要な iText jar 、を入手する。
itext-2.1.7.jar は、Maven central Repopsitory に存在しないので、ここから jasperreports-5.6.0-project.zip ダウンロードしたら
中に入っている itext-2.1.7.jar をローカルリポジトリに格納する。

mvn install:install-file -Dfile=c:/work/itext-2.1.7.jar -DgroupId=com.lowagie -DartifactId=itext -Dversion=2.1.7 -Dpackaging=jar -DgeneratePom=true

jrxml ファイルを編集して、日本語文字を出力するためフォント設定を行い、以下の様に、Exception が出る!!

net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font : 
pdfFontName   : HeiseiKakuGo-W5
pdfEncoding   : UniJIS-UCS2-H
isPdfEmbedded : true
  at net.sf.jasperreports.engine.export.JRPdfExporter.getFont(JRPdfExporter.java:2116)
  at net.sf.jasperreports.engine.export.JRPdfExporter.getChunk(JRPdfExporter.java:1906)
  at net.sf.jasperreports.engine.export.JRPdfExporter.getPhrase(JRPdfExporter.java:1875)
  at net.sf.jasperreports.engine.export.SimplePdfTextRenderer.getPhrase(SimplePdfTextRenderer.java:89)
  at net.sf.jasperreports.engine.export.SimplePdfTextRenderer.render(SimplePdfTextRenderer.java:99)
  at net.sf.jasperreports.engine.export.JRPdfExporter.exportText(JRPdfExporter.java:2238)
  at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:950)
  at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:909)
  at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:786)
  at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:513)
  at net.sf.jasperreports.engine.JasperExportManager.exportToPdfFile(JasperExportManager.java:157)
  at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfFile(JasperExportManager.java:505)


Maven で、itext-asian-5.2.0.jar を取得して解決させようとしても、ダメ!である。


JARファイル名 = iTextAsian.jar を使わないとならないらしく、これは、iReport-5.6.0.zip の中、
ireport/modules/ext の中に存在する。
これを CLASSPATH に設定すれば、解決する。

iReport-5.6.0.zipは、以下から入手する。

http://sourceforge.net/projects/ireport/

NGだった itext-asian-5.2.0.jar と、iTextAsian.jar を比べると、、、
フォントファイルが格納されてるPATHが、違っている。
itext-asian-5.2.0.jar は、、
/com/itextpdf/text/pdf/fonts/cmap/
iTextAsian.jar は、、
/com/lowagie/text/pdf/fonts/
という PATH にフォントファイルが存在する。
iTextAsian.jar の方が古い。

iTextAsian.jarCLASSPATH のに設定するのではなく、Maven依存関係で設定したいので、

mvn install:install-file -Dfile=d:/work/iTextAsian.jar -DgroupId=com.lowagie -DartifactId=iTextAsian -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true

<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>iTextAsian</artifactId>
    <version>1.0</version>
</dependency>


無事、日本語が出力された。

=============================================
調査していた時、以下の方法を見つけたがうまくいかなかった。

JRProperties.setProperty("net.sf.jasperreports.default.pdf.font.name", "HeiseiKakuGo-W5");
JRProperties.setProperty("net.sf.jasperreports.default.pdf.encoding", "UniJIS-UCS2-H");
JRProperties.setProperty("net.sf.jasperreports.default.pdf.embedded", "true");


itext-asian-5.2.0.jar の中のパッケージツリーを、iTextAsian.jar にすれば、この方法でいけるのだろうか?

そんなことしたくないし、フォントだけしかないから、iTextAsian.jar を使えば良いだろう。