我有一个使用JSF和PrimeFaces开发的项目。我需要用Jasper在PDF上显示条形码。我怎么能做到这一点?
答案 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而不是图像