2

イメージを Oracle データベースに BLOB として保存しました。モデル クラスには byte[] image; が含まれています。データベースの BLOB フィールドに対応します。データベース内のすべての画像を PDF にエクスポートする必要があります。Javaでは、次のコードを使用しました:




    JasperReport jasperReport = JasperCompileManager.compileReport('jrxml file');
       JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(imageObjList);  
       //imageObjList containing the model 'ImageObj' which contain  byte[] image 
       JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,jasperParameter,ds);
       JasperExportManager.exportReportToPdfStream(jasperPrint,responce.getOutputStream() );

jrxmlファイルの作成にiReportを使用しました

私のjrxmlでは、フィールドクラスタイプがjava.io.InputStreamのイメージとしてフィールドを作成します

私の画像では、画像式を $F{image} として指定し、画像クラス式を java.awt.Image として指定しました。

PDF レポートを作成できません。

私は例外を取得しています




    net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression: 
       Source text : $F{image}
       ..... 
       Caused by: java.lang.ClassCastException: [B cannot be cast to java.io.InputStream
       at ImageReport_1374240048064_891215.evaluate(ImageReport_1374240048064_891215:171)

pdfの画像が必要です。

4

1 に答える 1

4

「[B cannot be cast to java.io.InputStream」というエラー メッセージは、バイト配列 ([B) を InputStream にキャストできないことを意味します。問題は、jrxml ファイルのイメージ フィールドのタイプが ImageObj Bean のフィールドのタイプと一致しないことです。

JasperReports Ultimate Guide によると、次のタイプを画像式の入力データとして使用できます。

  • java.lang.String
  • java.io.ファイル
  • java.net.URL
  • java.io.InputStream
  • java.awt.Image
  • net.sf.jasperreports.engine.JRRenderable

したがって、byte[] を別のデータ型に変換する必要があります。InputStream が最も簡単な方法です。

ImageObj の getter を次のように変更します。

public InputStream getImage() {
    return new ByteArrayInputStream(image);
}

画像クラス式を java.io.InputStream に設定します。

于 2013-07-30T13:01:57.970 に答える