为什么我在Linux下遇到这个字体问题?

时间:2016-03-30 10:46:26

标签: fonts jasper-reports

我使用下面的代码生成jasper报告,在windows下可以正常工作。 嵌入了jasper报告中的字体。使用maven依赖关系jasperreports-fonts将字体导入应用程序。特别是DeJaVu Sans。

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)

1 个答案:

答案 0 :(得分:0)

扼杀这可能是java.io.tmpdir问题。

更改临时目录的权限或根据需要进行设置

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

有关详细信息,请参阅:Environment variable to control java.io.tmpdir?

注意:如果您使用的是tomcat(它可能使用的是tomcat的临时目录),最好添加:

-Djava.awt.headless=true