条码生成

在jfinal中条码使用的包是zxing,我继承了Render类并且自定义一个controller继承了Contronller类实现了 renderBarcode,成功是成功了,但是生成的条形码图片底下却没带有任何内容,看来只能集成barcode4j来实现了

评论区

JFinal

2017-07-07 11:21

zxing 是支持条型码生成的,建议看一下 zxing 的文件,然后做一个 BarcodeRender 就可以了

cnzzr

2017-07-07 21:23

条形码的数字需要自己加

cnzzr

2017-07-07 21:23

/**
* 生成条形码规则为 Code128
*
* @param contents 数据
* @param width
* @param height
* @param showText 是否显示数据
* @return BufferedImage
*/
public BufferedImage createCode128(String contents, int width, int height, boolean showText) {
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.MARGIN, 16); //边距,条形码静区也叫空白区,是条码左右的空白部分,好让扫描设备做好准备,如果没有静区会导致无法读取条码。
int defaultFontSize = 16;
try {
if (showText && height < (4 + defaultFontSize)) {
height += defaultFontSize;
}
BitMatrix bitMatrix = new Code128Writer().encode(contents, BarcodeFormat.CODE_128, width, height, hints);
BufferedImage bufferedImage = me.toBufferedImage(bitMatrix);

if (showText) {
height = bufferedImage.getHeight();
width = bufferedImage.getWidth();

Graphics g = bufferedImage.getGraphics();

Font textFont = new Font("TimesRoman", Font.BOLD, defaultFontSize);
g.setFont(textFont);
//得到当前的font metrics
FontMetrics fm = g.getFontMetrics();
int fnFontHeight = fm.getHeight();
int posX = (width - fm.stringWidth(contents)) / 2;
int posY = height - fnFontHeight;
g.setColor(Color.white);
g.fillRect(0, posY, width, height);//创建文字显示区域
g.setColor(Color.black);
int fontPosY = height - (fnFontHeight - defaultFontSize) / 2;//计算文字写入位置
g.drawString(contents, posX, fontPosY);
g.dispose();
bufferedImage.flush();
}
return bufferedImage;
} catch (WriterException e) {
log.error("生成Code128出错", e);
}
return null;
}

或是的话

2017-07-09 20:40

@JFinal 条形码部分我已经实现了,关键是 zxing 不支持在条形码底下生成对应的内容

或是的话

2017-07-09 20:40

@cnzzr 非常感谢大神的分享,解决了我的问题

热门反馈

扫码入社