[英]JasperReports API. Getting error when using Image in report: net.sf.jasperreports.engine.JRException: Byte data not found at
[英]Getting net.sf.jasperreports.engine.JRException: Byte data not found at location when pass java.awt.Image as parameter
當我嘗試顯示從JFileChooser選擇的圖像以傳遞給JasperReports報告時出現上述異常,有人可以幫我弄清楚嗎?
我遵循的步驟是:
$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.