java使用jbarcode生成条形码
生活随笔
收集整理的這篇文章主要介紹了
java使用jbarcode生成条形码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
準備工作:
開發工具:eclipse4.5+jdk1.7
所需jar包:jbarcode-0.2.8.jar
案例:
package jbarcode; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import org.jbarcode.JBarcode; import org.jbarcode.JBarcodeFactory; import org.jbarcode.encode.Code128Encoder; import org.jbarcode.encode.InvalidAtributeException; import org.jbarcode.paint.TextPainter; import org.jbarcode.util.ImageUtil;/** *@class:JbarcodeUtil *@descript:生成條形碼最標準 *@date:2016年11月25日 下午1:46:07 *@version:V1.0 *備注: *1.靜態代碼塊的作用:當類被載入時,靜態代碼塊被執行,且只被執行一次,靜態塊常用來執行類屬性的初始化。 *2.常量條形碼的高度和字體大小設置很重要,若是設置小了會看不到設置的文件 */ public class JbarcodeUtil { //設置條形碼高度 private static final int BARCODE_HEIGHT = 40; //設置條形碼默認分辨率 private static final int BARCODE_DPI = ImageUtil.DEFAULT_DPI; //設置條形碼字體樣式 private static final String FONT_FAMILY = "console"; //設置條形碼字體大小 private static final int FONT_SIZE = 15; //設置條形碼文本 public static String TEXT = ""; //創建jbarcode private static JBarcode jbc = null; static JBarcode getJBarcode() throws InvalidAtributeException { /** * 參考設置樣式: *barcode.setEncoder(Code128Encoder.getInstance()); //設置編碼*barcode.setPainter(WidthCodedPainter.getInstance());// 設置Painter*barcode.setTextPainter(BaseLineTextPainter.getInstance()); //設置TextPainter*barcode.setBarHeight(17); //設置高度*barcode.setWideRatio(Double.valueOf(30).doubleValue());// 設置寬度比率*barcode.setXDimension(Double.valueOf(2).doubleValue()); // 設置尺寸,大小 密集程度*barcode.setShowText(true); //是否顯示文本*barcode.setCheckDigit(true); //是否檢查數字*barcode.setShowCheckDigit(false); //是否顯示檢查數字*/ if (jbc == null) { //生成code128 jbc = JBarcodeFactory.getInstance().createCode128(); jbc.setEncoder(Code128Encoder.getInstance()); jbc.setTextPainter(CustomTextPainter.getInstance()); jbc.setBarHeight(BARCODE_HEIGHT); jbc.setXDimension(Double.valueOf(0.8).doubleValue());jbc.setShowText(true); } return jbc; } /** * @descript:生成條形碼文件 * @param message 條形碼內容 * @param file 生成文件 */ public static void createBarcode(String message, File file,String text) { try { FileOutputStream fos = new FileOutputStream(file); createBarcode(message, fos,text); fos.close(); } catch (IOException e) { throw new RuntimeException(e); } } /** * @descript:生成條形碼并寫入指定輸出流 * @param message 條形碼內容 * @param os 輸出流 */ public static void createBarcode(String message, OutputStream os,String text) { try { //設置條形碼文本TEXT=text;//創建條形碼的BufferedImage圖像 BufferedImage image = getJBarcode().createBarcode(message); ImageUtil.encodeAndWrite(image, ImageUtil.PNG, os, BARCODE_DPI, BARCODE_DPI); os.flush(); } catch (Exception e) { throw new RuntimeException(e); } } /** * 靜態內部類 * 自定義的 TextPainter, 允許定義字體,大小,文本等 * 參考底層實現:BaseLineTextPainter.getInstance() */ protected static class CustomTextPainter implements TextPainter { private static CustomTextPainter instance =new CustomTextPainter(); public static CustomTextPainter getInstance() { return instance; } public void paintText(BufferedImage barCodeImage, String text, int width) { //繪圖 Graphics g2d = barCodeImage.getGraphics(); //創建字體 Font font = new Font(FONT_FAMILY, Font.PLAIN, FONT_SIZE * width); g2d.setFont(font); FontMetrics fm = g2d.getFontMetrics(); int height = fm.getHeight(); int center = (barCodeImage.getWidth() - fm.stringWidth(text)) / 2; g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, barCodeImage.getWidth(), barCodeImage.getHeight() * 1 / 20); g2d.fillRect(0, barCodeImage.getHeight() - (height * 9 / 10), barCodeImage.getWidth(), (height * 9 / 10)); g2d.setColor(Color.BLACK); //繪制文本 g2d.drawString(TEXT, 0, 145); //繪制條形碼 g2d.drawString(text, center, barCodeImage.getHeight() - (height / 10) - 2); } } //測試 public static void main(String[] args) throws FileNotFoundException, IOException { List<String> list=new ArrayList<String>(); list.add("KJ4.1-0127-0001"); list.add("KJ4.1-0128-0001"); list.add("KJ4.1-0129-0001"); list.add("KJ4.1-0130-0001"); if(list!=null && list.size()>0){ for(String message:list){ JbarcodeUtil.createBarcode(message, new File("D:\\codeImg\\"+message+".png"),"蘇交科"); } } } }效果圖:
條形碼樣式:
備注:
1.//設置條形碼高度
?? ?private static final int BARCODE_HEIGHT = 20;
? //設置條形碼字體大小
? private static final int FONT_SIZE = 15;
這2個設置大小很重要,若是設置值小了則看不到文件如“蘇薇”,自己可以把值修改為12運行下會發現文本"蘇微"看不到,這是由于高度太小,字體無法顯示
2.生成的條形碼用掃碼槍可以掃描,但是有時候掃描不了,原因是生成的條形碼密度太厚,故"jbc.setXDimension(Double.valueOf(0.8).doubleValue());"設置很重要,值越小密度越細,條形碼寬度越寬。
3.案例中message="KJ4.1-0130-0001",若message="KJ4.1-0130-0001(001)"則掃描不了,原因識別不了括號
4.該案例生成的條形碼掃描反應慢
總結
以上是生活随笔為你收集整理的java使用jbarcode生成条形码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 城市信息化重要载体“无线城市”
- 下一篇: 使用 mongorestore恢复数据以