我想將條形碼放在我的頁面中並可以預覽它。條碼生成器是google.zxing和我的報告工具是iReport。iReport中的google.zxing條碼生成器
但我不知道,如何配置Image Expression
和Expression Class
的圖像在iReport。
我想將條形碼放在我的頁面中並可以預覽它。條碼生成器是google.zxing和我的報告工具是iReport。iReport中的google.zxing條碼生成器
但我不知道,如何配置Image Expression
和Expression Class
的圖像在iReport。
這兩個關鍵思想首先要編寫一些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();
}
}
}
這是全硬編碼醜陋的,但關鍵的想法都被顯示。然後,你需要這樣定義報告:
select 'some text' as barcode_text
我包括這只是爲了加強一點,我的小腳本硬編碼字段名barcode_text
。 (這很糟糕。)BarCodeImage
類型java.awt.image.BufferedImage
與計算System
。 這個名字在scriptlet中也是硬編碼的。 (這是同樣糟糕。)$V{BarCodeImage}
將圖像元素添加到報告中。的結果是開心快樂的QR碼在您的JasperReport生成:
我記得,我已經看到它做的事情更乾淨的樣品。它實際上包含了一個很好的插件,因此您可以輕鬆地將此功能安裝到iReport中。如果我可以追蹤到,那麼我會更新這篇文章。但在此之前,這至少涵蓋了所有的關鍵點。
另外,在第15章中有非常好的指導,如何創建腳本http://www.opus-college.net/devcorner/iReport-Ultimate-Guide-3.pdf –
圖像表達式應返回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,你可以在圖像表達式字段使用編碼圖像
http://groups.google.com/group/zxing/browse_thread/thread/e8fbcde52f9efd80 –
@AlexK:我以前曾試過,但還不清楚 – deepmax
您至少應該告訴我們您嘗試使用哪種條形碼生成... –