1

当我在开发环境(SunOS 5.10 i86pc Solaris)中启动我的脚本时出现以下异常,我尝试在谷歌上搜索数小时尝试各种建议的解决方法,但没有解决问题。事实上,当我启动脚本时尝试使用超级用户会生成报告,而对于普通用户,我会得到以下异常并且不会生成报告。

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) at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.parseFontFamily(SimpleFontExtensionHelper.java:261) at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.parseFontFamilies(SimpleFontExtensionHelper.java:232) at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.loadFontFamilies(SimpleFontExtensionHelper.java:193) at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.loadFontFamilies(SimpleFontExtensionHelper.java:162) at net.sf.jasperreports.engine.fonts.FontExtensionsRegistry.getExtensions(FontExtensionsRegistry.java:56) at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getExtensions(DefaultExtensionsRegistry.java:110) at net.sf.jasperreports.engine.util.JRStyledTextParser.<clinit>(JRStyledTextParser.java:83) ... 40 more Caused by: java.io.IOException: Problem reading font data. at java.awt.Font.createFont(Font.java:967) at net.sf.jasperreports.engine.fonts.SimpleFontFace.<init>(SimpleFontFace.java:100) ... 50 more

我注意到文件写入临时文件夹(/var/tmp)的权限设置为 600,如何在 Jasper Report 中设置这些文件必须的权限?还是我应该重新检查 /bin/java 的权限?

4

2 回答 2

2

在某些情况下,原因是正在运行的实例无法写入 Java 临时目录 (java.io.tmpdir)。

如果您在 tomcat 上运行它,则可能您删除了 tomcat 安装的临时目录,或者该文件夹具有错误的权限。

(tomcat 文件夹)/temp

于 2014-01-23T05:08:40.600 回答
1

我发现每次调用genarazione PDF的方法时,该库可以避免在运行时编译,直接用数据填充file.jasper。使用的代码片段如下:

FileInputStream fis = new FileInputStream("<NAME OF FILE.JASPER>"); 
BufferedInputStream bufferedInputStream = new BufferedInputStream(fis);
//Load bufferedInputStream file.jasper 
jasperReport = (JasperReport) JRLoader.loadObject(bufferedInputStream); 
jasperPrint = JasperFillManager.fillReport(jasperReport,parameters,new JRBeanArrayDataSource(arrlist));
JasperExportManager.exportReportToPdfFile(jasperPrint,"<NAME OF OUTPUT FILE>");

这样就绕过了问题!

于 2014-02-03T11:29:42.130 回答