大约8年以来,我们一直将JasperReports用作Java应用程序中的报告编写器。大多数情况下,这很好,但最近我们遇到了一个困扰我们的问题。
我们在第一页上有一个带有公司徽标的报告。该报告通常不到2页,而且效果很好。
但是,当报告移至第三页时(这种情况非常少见),当我们尝试将其导出为PDF时会遇到以下异常:
net.sf.jasperreports.engine.JRException: java.io.IOException: The byte array is not a recognized imageformat.
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.processImageRetainShape(JRPdfExporter.java:1747)
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.process(JRPdfExporter.java:1604)
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.access$300(JRPdfExporter.java:1532)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportImage(JRPdfExporter.java:1472)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:1090)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportFrame(JRPdfExporter.java:3117)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:1098)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:1053)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:917)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:537)
....
(our application)
....
Caused by: java.io.IOException: The byte array is not a recognized imageformat.
at com.lowagie.text.Image.getInstance(Unknown Source)
at net.sf.jasperreports.engine.export.JRPdfExporter$InternalImageProcessor.processImageRetainShape(JRPdfExporter.java:1742)
... 47 more
注意:我们可以在Jasper查看器中很好地查看报告,仅当将报告导出为PDF以通过电子邮件发送报告时才会发生错误。
我们正在使用的Jasper的当前版本是6.4.1,其中包括itext的2.1.7-js6版本(异常的来源)。