【发布时间】:2015-10-13 15:01:16
【问题描述】:
我有一个使用 JSF 和 PrimeFaces 开发的项目。我需要使用 Jasper 在 PDF 上显示条形码。我怎样才能做到这一点?
【问题讨论】:
-
你的努力是什么?
-
征求意见 SO ; )
我有一个使用 JSF 和 PrimeFaces 开发的项目。我需要使用 Jasper 在 PDF 上显示条形码。我怎样才能做到这一点?
【问题讨论】:
我建议您使用barcode4j 生成条形码(注意IReport 已经可以处理这些,但我将向您展示java 方式)。
制作一个返回条形码(图像)es的方法。
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
此外,您可以自然地使用非静态方法,例如将条形码图像作为参数传递或将您的对象作为参数传递到 jrxml。
这些图像是可打印和可读的(用条形码阅读器测试),但如果你喜欢高分辨率图像,我建议你使用 SVG 而不是 Image
【讨论】: