barcode添加文字

类1:

package com.yu.gogo;

import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import javax.imageio.ImageIO;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.MediaPrintableArea;
import javax.print.attribute.standard.OrientationRequested;
import javax.print.attribute.standard.PrintQuality;
import javax.swing.ImageIcon;

import org.krysalis.barcode4j.impl.code128.Code128Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.krysalis.barcode4j.tools.UnitConv;

public class MainCls {

	
    /**
     * 生成文件
     *
     * @param msg
     * @param path
     * @return
     */
    public static File generateFile(String msg, String path) {
        File file = new File(path);
        try {
            generate(msg, new FileOutputStream(file));
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        return file;
    }
    
    /**
     * 生成字节
     *
     * @param msg
     * @return
     */
    public static byte[] generate(String msg) {
        ByteArrayOutputStream ous = new ByteArrayOutputStream();
        generate(msg, ous);
        return ous.toByteArray();
    }
	
    public static void generate(String msg, OutputStream ous) {
        
    	Code128Bean bean = new Code128Bean();
 
        // 精细度
        final int dpi = 150;
        // module宽度
        final double moduleWidth = UnitConv.in2mm(1.0f / dpi);
 
        // 配置对象
        bean.setModuleWidth(moduleWidth);
        bean.setModuleWidth(0.35d);	//设置条间距
        bean.setQuietZone(2);	//水平空白
        bean.setVerticalQuietZone(1);	//垂直空白
        bean.setFontSize(3);
        bean.doQuietZone(false);
 
        String format = "image/png";
        try {
 
            // 输出到流
            BitmapCanvasProvider canvas = new BitmapCanvasProvider(ous, format, dpi, BufferedImage.TYPE_BYTE_BINARY, false, 0);
 
            // 生成条形码
            bean.generateBarcode(canvas, msg);
 
            // 结束绘制
            canvas.finish();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
	
    public static void setPrint (){
    	PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
    	DocFlavor flavor = DocFlavor.BYTE_ARRAY.PNG;
    	PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
    	for(int i=0;i<printService.length;i++){
    		String printName = printService[i].getName();
    		System.out.println(printName);
    	}
    	
    	PrintService PS = PrintServiceLookup.lookupDefaultPrintService();
    	String printName = PS.getName();
    	System.out.println("当前默认打印机为:"+printName);
    	System.out.println("如果不争取请在控制面板设置默认打印机");
    }
    
    // color #2395439
    public static Color getColor(String color) {
        if (color.charAt(0) == '#') {
            color = color.substring(1);
        }
        if (color.length() != 6) {
            return null;
        }
        try {
            int r = Integer.parseInt(color.substring(0, 2), 16);
            int g = Integer.parseInt(color.substring(2, 4), 16);
            int b = Integer.parseInt(color.substring(4), 16);
            return new Color(r, g, b);
        } catch (NumberFormatException nfe) {
            return null;
        }
    }
    
    public static byte[] drawTextInImg(byte[] baseByte, FontText text) {
    	byte[] retByte = null;
        ImageIcon imgIcon = new ImageIcon(baseByte);
        Image img = imgIcon.getImage();
        int width = img.getWidth(null);
        int height = img.getHeight(null);
        BufferedImage bimage = new BufferedImage(width+width/3, height+height/3,BufferedImage.TYPE_INT_RGB);

        Graphics2D g = bimage.createGraphics();
        g.setColor(getColor(text.getWm_text_color()));
        g.setBackground(Color.WHITE);
        g.clearRect(0, 0, width+width/3, height+height/3);
        g.drawImage(img, 30, 30, null);
        Font font = null;
        if (text.getWm_text_font() != null && text.getWm_text_size() != null) {
            font = new Font(text.getWm_text_font(), Font.BOLD,
                    text.getWm_text_size());
        } else {
            font = new Font(null, Font.BOLD, 15);
        }

        g.setFont(font);
        FontMetrics metrics = new FontMetrics(font){private static final long serialVersionUID = 1L;};
        Rectangle2D bounds = metrics.getStringBounds(text.getText(), null);
        //int textWidth = (int) bounds.getWidth();
        int textHeight = (int) bounds.getHeight();
        int left = 0;
        int top = textHeight;
        
        g.drawString(text.getText(), left, top);
        g.dispose();

        try {
        	ByteArrayOutputStream out = new ByteArrayOutputStream();
            ImageIO.write(bimage, "PNG", out);
            retByte = out.toByteArray();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return retByte;
    }
    
    public static void printPng (byte[] pbgByte){
    	try {
			DocFlavor dof = DocFlavor.INPUT_STREAM.PNG;
			
 
			PrintService ps = PrintServiceLookup.lookupDefaultPrintService();
 
			PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
			pras.add(OrientationRequested.PORTRAIT);
 
			pras.add(new Copies(1));
			pras.add(PrintQuality.HIGH);
			DocAttributeSet das = new HashDocAttributeSet();
 
			// 设置打印纸张的大小(以毫米为单位)
			das.add(new MediaPrintableArea(0, 0, 210, 296, MediaPrintableArea.MM));
			ByteArrayInputStream bin = new ByteArrayInputStream(pbgByte);
			Doc doc = new SimpleDoc(bin, dof, das);
 
			DocPrintJob job = ps.createPrintJob();
 
			job.print(doc, pras);
			bin.close();
		} catch (IOException ie) {
			ie.printStackTrace();
		} catch (PrintException pe) {
			pe.printStackTrace();
		}

    }
    
	public static void main(String[] args) throws IOException {
		String msg = "";
		System.out.println("输入0查看默认打印机"+",输入1-9打印");
		Properties pps = new Properties();
		pps.load(new FileInputStream("C:/base.properties"));
		while (true){
			int r = System.in.read();
			char s = (char)r;
			if (s == '0'){
				setPrint ();
			}
			if (s == '1' || s == '2' || s == '3' || s == '4' || s == '5' || s == '6' || s == '7' || s == '8' || s == '9'){
				msg = pps.getProperty("code"+s);
				String msgx = "    ";
				
				if ("true".equals(pps.getProperty("showDate"))){
					msgx += new SimpleDateFormat("yyyy/MM/dd").format(new Date());
				}
				
				if ("true".equals(pps.getProperty("showNum"))){
					int xNum = Integer.valueOf(pps.getProperty("num"));
					msgx += "    NO."+xNum;
					OutputStream out = new FileOutputStream("C:/base.properties");
					pps.setProperty("num", String.valueOf(xNum+1));
					pps.store(out, "Update num name");
				}
				
				
				byte[] pngByte = generate(msg);
				byte[] npngByte = drawTextInImg(pngByte, new FontText(msgx, 1, "#000000", 20, "宋体"));
				printPng(npngByte);
				
				
			}
		}
		
	}

}

 类2:

package com.yu.gogo;

public class FontText {

private String text;
    
    private int wm_text_pos;
    
    private String wm_text_color;
    
    private Integer wm_text_size;
    
    private String wm_text_font;//字体  “黑体,Arial”

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public int getWm_text_pos() {
        return wm_text_pos;
    }

    public void setWm_text_pos(int wm_text_pos) {
        this.wm_text_pos = wm_text_pos;
    }

    public String getWm_text_color() {
        return wm_text_color;
    }

    public void setWm_text_color(String wm_text_color) {
        this.wm_text_color = wm_text_color;
    }

    public Integer getWm_text_size() {
        return wm_text_size;
    }

    public void setWm_text_size(Integer wm_text_size) {
        this.wm_text_size = wm_text_size;
    }

    public String getWm_text_font() {
        return wm_text_font;
    }

    public void setWm_text_font(String wm_text_font) {
        this.wm_text_font = wm_text_font;
    }

    public FontText(String text, int wm_text_pos, String wm_text_color,
            Integer wm_text_size, String wm_text_font) {
        super();
        this.text = text;
        this.wm_text_pos = wm_text_pos;
        this.wm_text_color = wm_text_color;
        this.wm_text_size = wm_text_size;
        this.wm_text_font = wm_text_font;
    }
    
    public FontText(){}
	
}

猜你喜欢

转载自blog.csdn.net/aa80303857/article/details/84922835