gpt4 book ai didi

java - 如何在报表中设置图片的相对路径?

转载 作者:行者123 更新时间:2023-11-30 07:08:19 33 4
gpt4 key购买 nike

所以我有一个显示 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

有什么想法吗?我很困惑,非常感谢任何帮助!

更新:知道了。必须在报告中创建一个参数并从图像表达式中调用该参数。然后我在 Java 代码中创建了一个 HashMap 和 InputStream,并将输入流放入 HashMap 中!如此简单的事情需要这么多代码!

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()));

希望这对其他人有帮助!请注意,您必须为要放置的每个图像创建单独的 HashMap 和输入流,即使它是相同的图像。

最佳答案

我个人没有用 jar 尝试过这种方法,但我希望它能有所帮助。正如您所说,问题来自文件路径。在 iReport 工具上,您可以使用相对路径,它适用于预览,但当报表生成集成在应用程序中时,它只能使用绝对路径。
我处理这个缺点的方法是在 Java 应用程序中获取图像的绝对路径,并将其作为参数传递给报告。示例:

 String image = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/Cards_Template/front.jpg");

注意:我已经构建了一个 JSF 应用程序,这就是我从它的上下文中获取路径的原因。如果你不这样做,Java 的 IO 或 NIO API 确实有一些方法可以做同样的事情。基本上,我从相对路径获得绝对路径。

关于java - 如何在报表中设置图片的相对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24099036/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com