簡體   English   中英

如何設置報表中圖片的相對路徑?

[英]How to set relative path of images in report?

所以我有一個顯示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並將輸入流放入哈希映射! 這么簡單的事情就需要這么多代碼!

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

希望這對別人有幫助! 請注意,您必須為要放置的每個圖像創建單獨的哈希圖和輸入流,即使它是同一圖像也是如此。

我個人還沒有嘗試過用罐子這種方式,但我希望它能對您有所幫助。 如前所述,問題出在文件路徑。 在iReport工具上,您可以使用相對路徑,並且可以在預覽中使用,但是當報表生成集成在應用程序中時,它只能與絕對路徑一起使用。
我解決此缺點的方法是通過獲取Java應用程序中圖像的絕對路徑,並將其作為參數傳遞給報表。 例:

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

注意:我已經構建了一個JSF應用程序,這就是為什么我要從其上下文中獲取路徑。 如果不這樣做,Java的IO或NIO API確實有一些方法可以做到這一點。 基本上,我從相對路徑獲得絕對路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM