`

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

 

分享到:
评论

相关推荐

    barcode4j添加文字

    **barcode4j添加文字** `barcode4j` 是一个开源的Java库,它允许开发者生成条形码和二维码。这个库基于Apache 2.0许可证,由Krysalis项目开发,现在由The Apache Software Foundation维护。在描述中提到的案例,...

    Asp.net 產生BarCode

    1. 引入库:在项目中添加所需的BarCode生成库,如果是NuGet包,可以通过右键点击项目,选择“管理NuGet程序包”,搜索并安装对应库。 2. 创建BarCode控件:在Aspx页面上创建一个WebControl,如Image控件,用于显示...

    microsoft barcode control 9.0 条形码生成及打印

    2. **控件集成**:在Windows Forms中, Barcode Control 9.0作为一个控件添加到工具箱中,可以通过拖放方式直接放到窗体上。然后,可以通过属性设置调整条形码的样式、尺寸、颜色以及包含的数据。 3. **数据绑定**...

    vb.net条码生成器BarCode39

    同时,考虑到用户界面的友好性,你可能还需要提供预览和设置功能,如调整条形码尺寸、添加文字标签等。 最后,关于文件名`vb.net条码生成器BarCode39`,这可能是源代码文件或示例项目的名称。如果你已经有一个名为`...

    barcode的php类

    6. **自定义样式**:为了满足设计需求,开发者可能希望自定义条形码的样式,比如添加文字标签、调整字体或设置边框等。 7. **性能优化**:对于大量条形码的生成,类库可能包含优化措施,如缓存预生成的条形码图像,...

    C# 生成二维码源码 可生成图片 底部可显示文字

    QRCoder则是一个专门用于生成二维码的C#库,提供了更多自定义选项,比如设置颜色、添加logo、在二维码底部显示文字等。 要实现描述中的功能,我们可以按照以下步骤操作: 1. **安装库**:使用NuGet包管理器或者...

    Barcode studio

    - **高度可配置**:可以调整条形码的宽度、高度、颜色、字体样式,以及添加前缀和后缀文字。 - **高质量渲染**:生成的条形码清晰度高,扫描识别率优秀,支持打印和屏幕显示。 - **兼容性广**:不仅支持多种条形码...

    java 条形码 128

    1. 添加`barcode4j`库依赖到项目中,这通常通过Maven或Gradle实现。 2. 创建`BarcodeGenerator`实例,并指定条形码类型为`Code128`. 3. 设置条形码的值,可以通过`setMessage()`方法传递要编码的数据。 4. 配置条形...

    barcode生成条形码带日期与增量

    "barcode加字"则意味着在条形码的基础上添加额外的文字信息,例如日期、序列号或者其他的标识符。这可以是条形码下方的文本,或者是嵌入到条形码图像中的微小字符。这样做可以提供额外的视觉确认,尤其是在条形码...

    安卓条码扫描二维码相关-BarcodeScanner二维码扫描器安卓源码.rar

    而二维码是二维的,能存储更多的数据,包括文字、网址、联系信息等。 二、 BarcodeScanner 源码解析 "BarcodeScanner"是一个基于Android平台的二维码扫描应用,其核心是ZXing(Zebra Crossing)库。ZXing是一个开源...

    BarCode.zip

    调整字体大小和行高,确保条形码清晰且不受文字或图像干扰。 - 校验码:某些条形码标准包含校验码以确保数据的准确性。在生成条形码时,确保字体能自动计算并添加校验码。 - 测试:在实际使用前,务必用条形码扫描器...

    php-barcode-generator:PHP中的条形码生成器,易于使用,非膨胀且独立于框架

    如果要在条形码下方输入代码文本,则可以稍后将其添加到此程序包的输出中。安装通过安装: composer require picqer/php-barcode-generator如果要生成PNG或JPG图像,则还需要在系统上安装GD库或Imagick。用法为

    java实现条形码二维码生成含文字标签信息

    这可以通过在生成的图像上添加文字或者使用图像处理库(如JavaFX或Apache Batik)来实现。例如,可以先创建一个带有文字标签的背景图像,然后将条形码或二维码作为前景合并到该图像上。 总的来说,Java结合ZXing库...

    一维码二维码生成识别工具barcode4j

    1. 引入barcode4j.jar:将此jar文件添加到项目的类路径中,确保项目可以访问到barcode4j的相关类和方法。 2. 创建生成器实例:通过`org.krysalis.barcode4j.impl`包下的具体实现类创建条码或二维码生成器对象,例如...

    C#使用ZPL开发BarCode程序

    ZPL是一种文本格式的编程语言,由一系列命令组成,这些命令能够指示Zebra打印机进行图形绘制、文字输出和条形码生成等操作。例如,`^BC`命令用于定义条形码类型,`^FT`和`^FS`分别用于设置条形码的起始位置和结束...

    BarcodeScanner安卓二维码扫描源码

    - 二维码(Quick Response Code)是一种二维条形码,能够存储比传统条形码更多的数据,包括文字、网址、联系信息等。 - 它由日本Denso Wave公司于1994年发明,通过黑白色像素矩阵编码信息,能够被各种设备快速读取...

    西铁城打印机命令集Label & Barcode Printers

    覆盖功能是西铁城打印机的一个重要特性,它允许用户在基础标签上添加额外的文字或图像信息,从而增强标签的功能性和信息量。 **3.2 内存类型** 为了支持覆盖功能,打印机需要具备一定容量的内存来存储这些额外的...

Global site tag (gtag.js) - Google Analytics