eoi*_*Dub 3 java jasper-reports
所以我有一个显示 jasper 报告的 java 应用程序。我使用Netbeans 的iReport插件在报告中放置了一张图像。在我当前的机器上一切都显示正常,但是当我尝试在另一台机器上运行编译后的 jar 时,报告将无法加载。
从Windows控制台来看,我认为这是因为图像的路径是绝对的,即引用开发机器硬盘上的特定文件夹。我需要使其与 jar 文件相关。我已将图像放入包中并确认它位于编译后的 jar 内。但是当我将iReport中的“图像表达式”值更改为“/reports/Logo.jpg”(其中 /reports 是包)并运行应用程序时,我得到
EXCEPTION: Byte data not found at : /reports/Logo.jpgnet.sf.jasperreports.engine.JRException: Byte data not found at : reports/Logo.jpg
Run Code Online (Sandbox Code Playgroud)
有什么想法要做什么吗?我很困惑,非常感谢任何帮助!
更新:明白了。必须在报表中创建一个参数并从图像表达式中调用该参数。然后我在Java代码中创建了HashMap和InputStream ,并将输入流放入哈希映射中!这么简单的事情却需要这么多代码!
Java代码:
//to get images to display in report, pass their relative path as input stream and add to HashMap
//there must be one stream and one HashMap per image
InputStream imgInputStream = this.getClass().getResourceAsStream("/reports/omacLogo.jpg");
InputStream imgInputStream2 = this.getClass().getResourceAsStream("/reports/omacLogo.jpg");
parameters.put("omacLogo", imgInputStream);
parameters2.put("omacLogo", imgInputStream2);
InputStream jasper1 = this.getClass().getResourceAsStream("/reports/OmacYTDReportFinalpg1.jasper");
InputStream jasper2 = this.getClass().getResourceAsStream("/reports/OmacYTDReportFinalpg2.jasper");
JasperPrint jp1 = JasperFillManager.fillReport(jasper1, parameters,new JRBeanCollectionDataSource(ie.orderofmalta.BeanFactory.getCalcs()));
JasperPrint jp2 = JasperFillManager.fillReport(jasper2, parameters2, new JRBeanCollectionDataSource(ie.orderofmalta.BeanFactory.getCalcs()));
Run Code Online (Sandbox Code Playgroud)
希望这对其他人有帮助!请注意,您必须为要放置的每个图像创建单独的哈希映射和输入流,即使它是同一图像。
我个人还没有用罐子尝试过这种方法,但我希望它有帮助。正如您所说,问题来自文件路径。在 iReport 工具上,您可以使用相对路径,并且它可以在预览中使用,但是当报表生成集成在应用程序中时,它只能使用绝对路径。
我处理这个缺点的方法是获取 java 应用程序内图像的绝对路径,并将其作为参数传递给报告。例子:
String image = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/Cards_Template/front.jpg");
Run Code Online (Sandbox Code Playgroud)
注意:我已经构建了一个 JSF 应用程序,这就是我从它的上下文中获取路径的原因。如果不这样做,Java 的 IO 或 NIO API 确实有一些方法可以执行相同的操作。基本上,我从相对路径得到绝对路径。
| 归档时间: |
|
| 查看次数: |
11334 次 |
| 最近记录: |