JasperFillManager.fillReport()方法抛出java.io.Exception

时间:2013-10-15 16:26:02

标签: java jasper-reports

当我在开发环境(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的权限吗?

2 个答案:

答案 0 :(得分:1)

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

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

(tomcat文件夹)/ temp

答案 1 :(得分:0)

我发现每次调用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>");

通过这种方式,它绕过了问题!