2016-03-30 25 views
1

窓の下でうまく動作する以下のコードを使用してジャスパーレポートを生成します。 ジャスパーレポートのフォントが埋め込まれています。フォントは、maven依存関係jasperreports-fontsを使用してアプリケーションにインポートされます。特にDeJaVu Sans。Linuxでこのフォントの問題が発生するのはなぜですか?

JasperDesign jasperDesign = JRXmlLoader.load(jasperStream); 
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); 
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, jrDataSource); 
JasperViewer.viewReport(jasperPrint, false); 

ただし、Linux環境でアプリケーションをデプロイすると、以下のエラーが表示されます。

java.lang.ExceptionInInitializerError 

Caused by: net.sf.jasperreports.engine.JRRuntimeException: java.io.IOException: Problem reading font data. 
    at net.sf.jasperreports.engine.fonts.SimpleFontFace.<init>(SimpleFontFace.java:108) 
    at net.sf.jasperreports.engine.fonts.SimpleFontFace.<init>(SimpleFontFace.java:128) 
    at net.sf.jasperreports.engine.fonts.SimpleFontFace.getInstance(SimpleFontFace.java:67) 
    at net.sf.jasperreports.engine.fonts.SimpleFontFamily.setNormal(SimpleFontFamily.java:99) 
Caused by: java.io.IOException: Problem reading font data. 
    at java.awt.Font.createFont0(Font.java:1000) 
    at java.awt.Font.createFont(Font.java:877) 

答えて

0

これはおそらくjava.io.tmpdirの問題です。

変更tempディレクトリのパーミッションやあなたが見る詳細情報については

System.setProperty("java.io.tmpdir","whereYouLike"); 

を望むように設定します。Environment variable to control java.io.tmpdir?

注:Tomcatを使用している場合(それはおそらく、Tomcatの一時ディレクトリを使用しています)と次のように追加することをお勧めします。

-Djava.awt.headless=true 
+0

残念ながら提案はありません。私がヘッドレスの場合、java.awt.HeadlessExceptionの例外がスローされます。 私はJettyサーバを使用しています – n1ckgun

+0

@ n1ckgun私はまだそれが一時的なディレクトリの問題だと思っています。おそらくこれはhttp://www.eclipse.org/jetty /documentation/current/ref-temporary-directories.html –

+0

私は、次のように一時ディレクトリを指定してjettyを起動しようとしました: /usr/bin/java -Djetty.state =/jetty/jetty.state -Djetty .port = 8080 -Xmx1024m -Djetty.logs =/jetty/logs/-Djetty.home =/jetty -Djava.io.tmpdir =/jetty/tempdir -jar /jetty/start.jar etc/jetty-logging.xmlなど/jetty-started.xml ここで、/ jetty/tempdirはアクセス権に問題がありません – n1ckgun