2016-03-30 43 views
1

我使用下面的代碼在windows下正常工作生成碧玉報告。 賈斯珀報告中的字體被嵌入。使用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問題。

更改臨時目錄的權限,或將其設置爲你希望

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

欲瞭解更多信息,請參閱:Environment variable to control java.io.tmpdir?

注:如果您使用的是Tomcat(它可能使用Tomcat的臨時目錄)和最好補充:

-Djava.awt.headless=true 
+0

不幸的是沒有任何建議的工作。如果我把無頭真正然後它拋出異常java.awt.HeadlessException, 我使用碼頭服務器 – 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