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(){}
	
}

 

Barcode Studio 是生成高质量条形码图像的快捷方便的方法.(例如印刷的位图或矢量格式),无需编程。 即时使用条形码模板支持标准化条形码的创建。奥地利的 TEC-IT 自 1996 年以来一直在开发用于 条形码, 打印, 标签, 报告 和数据采集 的软件。公司提供标准软件,例如 TFORMer, TBarCodeBarcode Studio。 通用数据采集工具,例如 TWedge 或 Scan-IT to Office, 一个用于 移动数据收集 的 Android / iOS 应用, 完善我们的产品组合。我们可以 根据要求提供定制解决方案。 条码制作软件 Barcode Studio 中文版条码制作软件 Barcode Studio 中文版 Barcode Studio 15 特色 Bitmap 或矢量图像 所需要的条码将直接在屏幕上被创建和被参数化,无需特殊技能。条码直接在打印机或剪贴板上以图片 (BMP, GIF, JPG, TIF, PNG), 矢量图象 (EPS, PDF, PostScript®, SVG, AI) 或到剪贴板输出。 生成的条形码可以立即用于您的目的:将条形码图形添加到图像编辑程序,数据库,表单或文档中。 条码品质保证 Barcode Studio 提供的一个特别功能是内置的质量预览。预期的条形码质量被表示打印公差相对于所述输出分辨率 (DPI) 而计算实时. 因此,你可以在设计过程限定条形码,避免无法读取条形码。 序列号与数据导入 对于创建条码序列,Barcode Studio 提供一系列的可能性。您可以使其自动生成序列号或从外部文件 (TXT-, CSV) 导入条码数据。另外,Barcode Studio 提供一个允许批量操作(静音模式),并集成到第三方应用程序(如 Oracle 报表)的全功能的命令行界面。 预配置的模板 Barcode Studio 包含准备使用 条码模板 for EAN-13, EAN-8, UPC-A, UPC-E 和德国邮政 Premiumadress 数据矩阵. 所有条形码的设置进行了预配置,以满足完全规范。 移动标记 助理特别是简化创建为移动营销和电子名片的二维条码. 您可以在 Facebook,Twitter,LinkedIn的移动生成条形码标签, 发短信 或网站的访问及使用 vCard 或 meCard 格式 的条形码 . 如果需要的URL缩短(和跟踪),通过谷歌或 Bitly URL 缩短服务。 GS1 条码的创建也大大简化:只需选择所需的应用标识符 (AI) – 数据助手会自动处理正确的格式化(FNC1 插入)的。 特殊效果条码 很快创建醒目的条形码: 你可以自由地嵌入到标志的条码图像。此外,特殊的拉丝效果(如圆,圆角矩形,图像)也支持。 标签条码打印 对于生成的打印条码,用户可以从预定义的模板中选择,根据需要定义自定义标签。 Barcode Studio 提供如Avery或Avery/Zweckform模板。 所有条码 – 线性,二维,GS1 和复合 符号 – (QR-Code, Data Matrix , DP Premiumadress 等)条码作为 Bitmap – Barcode Studio 支持 条码图像文件 (BMP, GIF, JPG, TIF, PNG) 的输出。条码作为矢量图形 – 使用 Barcode Studio 您同样可以创建 矢量图像格式 (EPS, PDF, PostScript®)。 品质预览 – 品质预览 示出了设计过程中的预期的条形码质量,并有助于避免可读的条形码。特别效果 – 只需点击几下就可以嵌入徽标或图形到条码 或创建特殊效果条形码。数据输入助理 – 可以更容易创建 GS1 条码和移动标记码 (相 vCard, meCard, Facebook, 等) 的应用标识符。 数据导入 – 数据导入功能 允许使用从文本文档或 CSV 文档中的数据生成条码。连续性 – 使用嵌入式 条码连续生成器,您可以很方便地创建系列条码。字幕 – 多个字幕可定位条形码符号的上方或下方。 标签条码打印 – 跟预定的模板或自定义标签打印条码。跨平台 – Barcode Studio 可用于Microsoft® Windows, macOS® 和Linux®。 (UNIX® 如有需要!)命令行 – 使用命令行参数进行批处理操作并集成到第三方应用程序中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值