2011-10-02 68 views
14

我想將條形碼放在我的頁面中並可以預覽它。條碼生成器是google.zxing和我的報告工具是iReportiReport中的google.zxing條碼生成器

但我不知道,如何配置Image ExpressionExpression Class的圖像在iReport

+0

http://groups.google.com/group/zxing/browse_thread/thread/e8fbcde52f9efd80 –

+0

@AlexK:我以前曾試過,但還不清楚 – deepmax

+0

您至少應該告訴我們您嘗試使用哪種條形碼生成... –

回答

7

這兩個關鍵思想首先要編寫一些Java代碼來創建相關圖像,然後設計報告以適當引用此代碼。也許是爲了生成圖像最簡單的方法就是在這樣的小腳本:

package com.jaspersoft.alliances.mdahlman; 
import com.google.zxing.BarcodeFormat; 
import com.google.zxing.WriterException; 
import com.google.zxing.common.BitMatrix; 
import com.google.zxing.qrcode.QRCodeWriter; 
import com.google.zxing.client.j2se.MatrixToImageWriter; 
import net.sf.jasperreports.engine.JRDefaultScriptlet; 
import net.sf.jasperreports.engine.JRScriptletException; 

public class QRCodeScriptlet extends JRDefaultScriptlet { 
    public void afterDetailEval() throws JRScriptletException { 
     QRCodeWriter writer = new QRCodeWriter(); 
     BitMatrix matrix = null; 
     try { 
      matrix = writer.encode(getFieldValue("barcode_text").toString(), BarcodeFormat.QR_CODE, 256, 256); 
      this.setVariableValue("BarCodeImage", MatrixToImageWriter.toBufferedImage(matrix)); 
     } catch (WriterException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

這是全硬編碼醜陋的,但關鍵的想法都被顯示。然後,你需要這樣定義報告:

  1. 樣品查詢:select 'some text' as barcode_text 我包括這只是爲了加強一點,我的小腳本硬編碼字段名barcode_text。 (這很糟糕。)
  2. 變量:BarCodeImage類型java.awt.image.BufferedImage與計算System。 這個名字在scriptlet中也是硬編碼的。 (這是同樣糟糕。)
  3. 添加到iReport的類路徑:
    • 編譯小腳本.jar文件
    • core.jar添加(從斑馬線)
    • javase.jar(從斑馬線)
  4. 使用表達式$V{BarCodeImage}將圖像元素添加到報告中。

的結果是開心快樂的QR碼在您的JasperReport生成:

Generated QR-Code

我記得,我已經看到它做的事情更乾淨的樣品。它實際上包含了一個很好的插件,因此您可以輕鬆地將此功能安裝到iReport中。如果我可以追蹤到,那麼我會更新這篇文章。但在此之前,這至少涵蓋了所有的關鍵點。

+0

另外,在第15章中有非常好的指導,如何創建腳本http://www.opus-college.net/devcorner/iReport-Ultimate-Guide-3.pdf –

2

圖像表達式應返回java.awt.Image的任何子類。最簡單的方法是使用自己的幫助器類來生成圖像。您可以創建一個靜態方法,從String生成條形碼並從IReport調用該方法。

在ZXing的情況下,我不知道使用的方法,但我可以告訴我用什麼作爲ImageExpression使用燒烤庫。

 net.sourceforge.barbecue.BarcodeImageHandler.getImage(
MyBarcodeGenerator.getFromString($F{field}) 

MyBarcodeGenerator類包含在我的情況下返回net.sourceforge.barbecue.Barcode一個net.sourceforge.barbecue.linear.code39.Code39Barcode

Expression Class被忽略的方法getFromString(...)

--Edited:

MatrixToImageWriter.toBufferedImage(new QRCodeWriter().encode("BARCODE CONTENT", BarcodeFormat.QR_CODE,  400 /*Width*/, 400/*Height*/)); 

要在斑馬線應該使用MatrixToImageWriter

下面的代碼將一個QRCode的編碼成一個BufferedImage,你可以在圖像表達式字段使用編碼圖像