簡體   English   中英

Getting.net.sf.jasperreports.engine.JREException:當傳遞 java.awt.Image 作為參數時,在位置找不到字節數據

[英]Getting net.sf.jasperreports.engine.JRException: Byte data not found at location when pass java.awt.Image as parameter

當我嘗試顯示從JFileChooser選擇的圖像以傳遞給JasperReports報告時出現上述異常,有人可以幫我弄清楚嗎?

我遵循的步驟是:

  1. 通過報告檢查器添加了一個名為 photo 的參數,並將其參數 class 設置為 Object
  2. 從調色板中拖放圖像並將其表達式 class 作為java.awt.Image並將圖像表達式賦給$P{photo}

這是.jrxml文件中的圖像元素

<image>
   <reportElement x="315" y="0" width="195" height="77" uuid="59390988-25fc-4d62-80c4-bc19b80b0fa0"/>
   <imageExpression><![CDATA[$P{photo}]]></imageExpression>
</image>

這些是我參考並用於生成報告的代碼示例。

Image photo;
JFileChooser fc = new JFileChooser();

private void getPicture() {
    fc.setFileFilter(new FileNameExtensionFilter("Images", "jpg", "gif", "bmp"));
    if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
        fc.setCurrentDirectory(fc.getCurrentDirectory());

        ImageIcon icon = new ImageIcon(fc.getSelectedFile().getAbsolutePath());
        icon = new ImageIcon(icon.getImage().getScaledInstance(350, 350, Image.SCALE_DEFAULT));
        photo = icon.getImage();
    }

    if (photo == null) {
        System.out.println("null");
    }

    System.out.println("path= " + fc.getSelectedFile().getAbsolutePath());
    Map<String, Object> param = new HashMap<String, Object>();
    param.put("photo", photo);

    generateReports(param);
}


private void generateReports(Map param) {
    try {

        String source = "C:\\newReport.jrxml";

        if (new File(source).exists() == false) {
            System.out.println("Please  report Source does not exist");
            return;
        }

        JasperReport jasperReport = JasperCompileManager.compileReport(source);
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param, new JREmptyDataSource());
        JasperViewer.viewReport(jasperPrint, false);
    } catch (Exception e) {
        System.out.println("reports Error " + e.toString());
    }
}

轉到您的xml並執行此操作,圖像的位置如下所示,對我有用

imageExpression>![CDATA [“ src \\ Forms \\ leaf_banner_gray.png

當我從 JasperStudio 預覽 PDF 但從 Java 創建 PDF 時,下面的代碼行工作正常。

<imageExpression>![CDATA["src\Forms\leaf_banner_gray.png"]]</imageExpression>

最后,我們找到了解決方案。

//declared a property leafBanner of type InputStream
<parameter name="leafBanner" class="java.io.InputStream"/>
//leafBanner property has been used below
<imageExpression>![CDATA[$P{leafBanner}]]</imageExpression>

下面是從 Java 傳遞圖像為 stream 的代碼。

Map<String, Object> params = new HashMap<>();
File leafBanner= ResourceUtils.getFile("src//main//resources//images//leafBanner.PNG");
FileInputStream leafBannerStream = new FileInputStream(leafBanner);
params.put("leafBanner", leafBannerStream);

暫無
暫無

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

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