Java调用Zebra条码打印机打印条码、中英文数字条码混合标签,可自由控制格式和排版(2)

我在上一篇文章中介绍了Java调用条码打印机的相关方法,但是在实际生产环境中发现了一些问题,于是在此给出解决办法。

上一个Demo存在的一些问题包括:

1.打印浓度和宽度必须在打印机控制面板设置;

2.主机新添加的打印机获取不到;

3.严重:当某些中文字符无法打印时会终止程序。

4.添加了一个getMessage方法来获取打印结果。

第一个问题,只要在打印指令中加入~SDa和^PWa来控制打印深度和宽度即可。

第二个问题我采用了多种方法均无效,最终在一篇文章中偶然提到的一个在PrintServiceLookup.lookupPrintServices之前执行AppContext.getAppContext().put(PrintServiceLookup.class.getDeclaredClasses()[0], null)就能够解决问题。

第三个问题,通过try...catch捕获异常,并且替换掉这个无法打印的字符就行了。

完整的Demo如下

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;

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.standard.PrinterName;

import sun.awt.AppContext;
/**
 * 采用点阵字库ts24.lib
 * @author Labrador
 *
 */
public class ZplPrinter {
	private String printerURI = null;			//打印机完整路径
	private PrintService printService = null;	//打印机服务
	private byte[] dotFont;
	private String darkness = "~SD22";	//Set Darkness设置色带颜色的深度 0-30
	private String width = "^PW1200";	//Print Width打印宽度0-1500
	private String length = "^LL800";	//Label Length标签长度0-x(暂无作用)
	private String begin = "^XA" + darkness + width;	//标签格式以^XA开始
	private String end = "^XZ";			//标签格式以^XZ结束
	private String content = "";		//打印内容
	private String message = "";		//打印的结果信息

	/**
	 * 构造方法
	 * @param printerURI 打印机路径
	 */
	public ZplPrinter(String printerURI){
		this.printerURI = printerURI;
		//加载字体
		File file = new File("C://ts24.lib");
		if(file.exists()){
			FileInputStream fis;
			try {
				fis = new FileInputStream(file);
				dotFont = new byte[fis.available()];
				fis.read(dotFont);
				fis.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}else{
			System.out.println("C://ts24.lib文件不存在");
		}
		//初始化打印机
		AppContext.getAppContext().put(PrintServiceLookup.class.getDeclaredClasses()[0], null);//刷新打印机列表
		PrintService[] services = PrintServiceLookup.lookupPrintServices(null,null);
		if (services != null && services.length > 0) {
			for (PrintService service : se
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值