Fonts 为什么在Linux下会出现这种字体问题?

Fonts 为什么在Linux下会出现这种字体问题?,fonts,jasper-reports,Fonts,Jasper Reports,我使用下面的代码生成jasper报告,该代码在windows下运行良好。 jasper报告中的字体已嵌入。使用maven依赖项jasperreports字体将字体导入应用程序。特别是DeJaVu Sans JasperDesign jasperDesign = JRXmlLoader.load(jasperStream); JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); JasperPri

我使用下面的代码生成jasper报告,该代码在windows下运行良好。 jasper报告中的字体已嵌入。使用maven依赖项jasperreports字体将字体导入应用程序。特别是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)
java.lang.ExceptionInInitializeError
原因:net.sf.jasperreports.engine.JRRuntimeException:java.io.IOException:读取字体数据时出现问题。
位于net.sf.jasperreports.engine.fonts.SimpleFontFace.(SimpleFontFace.java:108)
位于net.sf.jasperreports.engine.fonts.SimpleFontFace.(SimpleFontFace.java:128)
位于net.sf.jasperreports.engine.fonts.SimpleFontFace.getInstance(SimpleFontFace.java:67)
位于net.sf.jasperreports.engine.fonts.SimpleFontFamily.setNormal(SimpleFontFamily.java:99)
原因:java.io.IOException:读取字体数据时出现问题。
位于java.awt.Font.createFont0(Font.java:1000)
位于java.awt.Font.createFont(Font.java:877)

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

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

System.setProperty("java.io.tmpdir","whereYouLike");
有关更多信息,请参阅:

注意:如果您正在使用tomcat(可能是使用tomcat的temp dir),最好添加:

-Djava.awt.headless=true

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

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

System.setProperty("java.io.tmpdir","whereYouLike");
有关更多信息,请参阅:

注意:如果您正在使用tomcat(可能是使用tomcat的temp dir),最好添加:

-Djava.awt.headless=true

不幸的是,这些建议都不起作用。如果我把headless设置为true,那么它会抛出java.awt.HeadlessException异常,我使用的是Jettyserver@n1ckgun我仍然认为这是暂时的目录问题,如果我试图通过如下方式指定临时目录来启动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/start.jar等/jetty-logging.xml等/jetty-start.xml where/jetty/tempdir没有任何问题permissions@n1ckgun尝试检查它正在使用Sys out getProperty(“java.io.tmpdir”)的临时控制器是否已检查。它是临时目录。路径是正确的,不幸的是,所有建议都不起作用。如果我把headless设置为true,那么它会抛出java.awt.HeadlessException异常,我使用的是Jettyserver@n1ckgun我仍然认为这是暂时的目录问题,如果我试图通过如下方式指定临时目录来启动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/start.jar等/jetty-logging.xml等/jetty-start.xml where/jetty/tempdir没有任何问题permissions@n1ckgun尝试检查它正在使用Sys out getProperty(“java.io.tmpdir”)的临时控制器是否已检查。它是临时目录。这条路是正确的