当我在开发环境(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的权限吗?
答案 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>");
通过这种方式,它绕过了问题!