2011-10-02 21 views
14

Desidero inserire un codice a barre nella mia pagina e visualizzarlo in anteprima. Il generatore di codici a barre è google.zxing e il mio strumento di segnalazione è iReport.generatore di codici a barre google.zxing in iReport

ma non so, come configurare Image Expression e Expression Class di un'immagine in iReport.

+0

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

+0

@AlexK: l'ho provato prima, ma non è chiaro – deepmax

+0

Dovresti almeno dirci che tipo di codice a barre stai provando generare ... –

risposta

7

Le due idee chiave sono prima di scrivere un po 'di codice Java per creare l'immagine pertinente e quindi di progettare il report per fare riferimento a questo codice in modo appropriato. Forse il modo più semplice per generare l'immagine è in uno scriptlet come questo:

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(); 
     } 
    } 
} 

che è pieno di brutture hard-coded, ma le idee chiave sono tutti visualizzati. Allora avete bisogno di definire il rapporto come questo: interrogazione

  1. Esempio: select 'some text' as barcode_text ho inserito questo solo per rafforzare il punto che il mio hard-scriptlet codici il nome del campo barcode_text. (Questo è male.)
  2. Variabile: BarCodeImage di tipo java.awt.image.BufferedImage con calcolo System. Anche questo nome è hardcoded nel scriptlet. (Questo è altrettanto male.)
  3. Aggiungi al classpath di iReport:
    • Il file .jar scriptlet compilato
    • core.jar (da ZXing)
    • javase.jar (da ZXing)
  4. Aggiungere un elemento Immagine al report con Expression $V{BarCodeImage}.

Il risultato è un felice QR-code felici nella vostra generato JasperReport:

Generated QR-Code

Ricordo un campione che ho visto che fa cose molto più pulito. In realtà includeva un bel plug-in in modo da poter facilmente installare questa funzionalità in iReport con il minimo sforzo. Se riesco a rintracciarlo, aggiornerò questo post. Ma fino ad allora questo copre almeno tutti i punti critici.

+0

Inoltre c'è un'ottima guida nel capitolo 15, come creare scriptlet http://www.opus-college.net/devcorner/iReport-Ultimate-Guide-3.pdf –

2

L'espressione immagine deve restituire qualsiasi sottoclasse di java.awt.Image. Il modo più semplice per ottenere ciò è utilizzare la tua classe di supporto per generare l'immagine. È possibile creare un metodo statico che genera un codice a barre da un String e chiamare tale metodo da IReport.

Nel caso di ZXing non conosco il metodo da utilizzare, ma posso dire quello che uso come ImageExpression utilizzando la libreria Barbecue.

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

MyBarcodeGenerator classe contiene il metodo getFromString(...) che restituisce un net.sourceforge.barbecue.Barcode nel mio caso un net.sourceforge.barbecue.linear.code39.Code39Barcode

Il Expression Class viene ignorato.

--Edited:

per codificare un'immagine in ZXing si dovrebbe usare MatrixToImageWriter

Il seguente codice codificare un QRCode in un BufferedImage che può essere utilizzato nel campo Immagine Espressione:

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