2015-10-13 320 views

回答

1

我建議你用barcode4j來生成條形碼(注意IReport已經可以處理這些了,但是我會告訴你java的方式)。

製作一個返回條形碼(圖片)的方法。

public static synchronized Image getGS1_128Production(String codeProduzione) { 

    if (codeProduzione==null){ 
     return null; 
    } 
    GS1_128 g = new GS1_128(codeProduzione); 
    //Start personalizzing barcode 
    int dpi = 150; 
    if (code.length()>40){ 
     dpi = 100; 
    } 
    if (code.length()>57){ 
     dpi = 75; 
    } 

    c.doQuietZone(true); 
    c.setQuietZone(5); 
    c.setFontSize(2d); 

    boolean antiAlias = false; 
    int orientation = 0; 

    BitmapCanvasProvider canvas = new BitmapCanvasProvider(dpi, BufferedImage.TYPE_BYTE_BINARY, antiAlias, orientation); 
    c.generateBarcode(canvas, code); 

    return canvas.getBufferedImage(); 
} 

然後在您的JRXML

<image scaleImage="Clip" hAlign="Center" vAlign="Middle" isUsingCache="false" onErrorType="Blank"> 
      <reportElement positionType="Float" x="65" y="66" width="405" height="82"> 
       <printWhenExpression><![CDATA[new Boolean($F{GS1_128}!=null)]]></printWhenExpression> 
      </reportElement> 
      <imageExpression class="java.awt.Image"><![CDATA[jdd.trace.barcode.BarCode4J.getGS1_128Production($F{GS1_128})]]></imageExpression> 
</image> 

注:在我的例子中,靜態方法方法getGS1_128Production是我的課 BarCode4J是在包jdd.trace.barcode

內。此外,你自然可以使用非通過例如傳遞條形碼Image作爲參數或將對象作爲參數傳遞給jrxml來實現靜態metods。

這些圖像是可印刷性和可讀性(帶條形碼閱讀器測試),但如果你喜歡高清晰度的圖像,我建議你使用SVG而不是圖像