使用条形码或qcode与Jasper报告

时间:2015-10-13 15:01:16

标签: jasper-reports barcode

我有一个使用JSF和PrimeFaces开发的项目。我需要用Jasper在PDF上显示条形码。我怎么能做到这一点?

1 个答案:

答案 0 :(得分: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>

注意:在我的示例中,静态metodo getGS1_128Production在我的班级中 BarCode4J

包中的jdd.trace.barcode

此外,您可以自然地使用非静态方法,例如将条形码Image作为参数传递或将对象作为参数传递给jrxml。

这些图像是可打印和可读的(使用条形码阅读器测试),但如果您喜欢高分辨率图像,我建议您使用SVG而不是图像