java实现条码打印机打印图片(USB)

客户的电脑访问系统实现打印的功能(打印机是USB没网口),在要打印的电脑要额外的程序

1.根据连接访问服务器,操作系统点击打印标签按钮

2.点击打印标签的js代码

//打印标签
function printTag(){
	
	var ids = [];
	var rows = $("#main .selected");
	var length = rows.length;
	if(!length) {
		top.layer.msg("请选择数据");
		return false;
	}
	$.each(rows,function(i,v){
		var id = $(v).find("input").val();
		ids.push(id);
	})
	$.ajax({
		type: 'post',
		url: ctx + "/experiment/plasma/FormsampleReceiveEx/givePrintOrder.action",
		data: {
			ids: ids
		},
		success: function(data){
			var data = JSON.parse(data);
			if(data.success){
				var sampleCode = data.sampleCode;
				var sampleType = data.sampleType;
				var illType = data.illType;
                //访问本地,打开一个窗口,然后关闭
				window.open("http://localhost:8090/Printer/print?sampleCode="+sampleCode+"&sampleType="+sampleType+"&illType="+illType).close();
			}
		}
	})
}

3.将想要打印的数据拼接到链接后面(注意get请求的长度,我的是足够了),然后访问了本地程序的链接,本地程序是将拿到的数据转化为图片然后在进行打印操作的,图片为每个字段显示一行,下面为打印本地程序的代码,一个servlet(注释很重要)

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String sampleCode = request.getParameter("sampleCode");
		String sampleType = request.getParameter("sampleType"); 
		String illType = request.getParameter("illType"); 
		sampleCode = new String(sampleCode.getBytes("ISO-8859-1"),"utf-8");
		sampleType = new String(sampleType.getBytes("ISO-8859-1"),"utf-8");
		illType = new String(illType.getBytes("ISO-8859-1"),"utf-8");
		String[] sampleCodes = sampleCode.split(",");
		String[] sampleTypes = sampleType.split(",");
		String[] illTypes = illType.split(",");
		int length = sampleCodes.length;
		for (int i = 0; i < length; i++) {
			String sc = sampleCodes[i];
			String st = sampleTypes[i];
			String it = illTypes[i];
			String[]verifyCodes = new String[] {sc, st, it};
			//生成图片路径参数:(图片的内容,图片的长,图片的高,显示字体的大小)
			String filePath = WordToPictrue.TextToPic(verifyCodes, 500, 300, 80);
            //打印图片		
			printPicture(filePath);		
            //清除图片	
			clearPicture(filePath);
		}
	}
	
    //清除图片
	private void clearPicture(String filePath) {
		File file = new File(filePath);
		if(file.exists()) {
			file.delete();
		}
	}

    //打印图片
	private void printPicture(String filePath) {
		File file = new File(filePath);
		if(file.exists()) {
			FileInputStream textStream = null;
			try {
				textStream = new FileInputStream(file);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
			if(textStream!=null) {
				// 指定打印输出格式
	            DocFlavor flavor = DocFlavor.INPUT_STREAM.PNG;//SERVICE_FORMATTED.PRINTABLE
	            // 定位默认的打印服务
	            PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
	            // 创建打印作业
	            DocPrintJob job = printService.createPrintJob();
	            // 设置打印属性
	            PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
	            pras.add(OrientationRequested.PORTRAIT);
	            pras.add(PrintQuality.HIGH);
	            pras.add(Chromaticity.MONOCHROME);
	            DocAttributeSet das = new HashDocAttributeSet();
	            // 指定打印内容
	            Doc doc = new SimpleDoc(textStream, flavor, das);
	            // 不显示打印对话框,直接进行打印工作
	            try {
	                job.print(doc, pras); // 进行每一页的具体打印操作
	            } catch (PrintException pe) {
	                pe.printStackTrace();
	            }
			}else {
				// 如果打印内容为空时,提示用户打印将取消
	            JOptionPane.showConfirmDialog(null,
	                    "Sorry, Printer Job is Empty, Print Cancelled!",
	                    "Empty", JOptionPane.DEFAULT_OPTION,
	                    JOptionPane.WARNING_MESSAGE);
			}
		}
	}

4,将文字转换为图片的方法(注释很重要)

public class WordToPictrue {
	 
		public static int getLength(String text) {
			int length = 0;
			for (int i = 0; i < text.length(); i++) {
				if (new String(text.charAt(i) + "").getBytes().length > 1) {
					length += 2;
				} else {
					length += 1;
				}
			}
			return length / 2;
		}
	 
		public static String TextToPic(String []verifyCodes, int width, int height,int fontSize) {
			try {
				String filepath = "D:/Printer/" + getDate() + ".png";
				File file = new File(filepath);
				if(!file.exists()) {
					file.mkdirs();
				}
				Font font = new Font("楷体", Font.BOLD, fontSize);
				FontMetrics fm = sun.font.FontDesignMetrics.getMetrics(font);
				BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
				Graphics2D g2 = (Graphics2D) bi.getGraphics();
				g2.setBackground(null);
				g2.clearRect(0, 0, width, height);
				g2.setFont(font);
				g2.setPaint(Color.BLACK);
				g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,0.3f));
				g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
		        int h = fm.getHeight();
		        for (int i = 0; i < verifyCodes.length; i++) {
//如果你显示图片中的文字缺失了,可以加大第三个参数,就是加大了图片中文字与上边距的距离
		            g2.drawString(verifyCodes[i], 0, i * h + 70);
		        }
				g2.dispose();
				ImageIO.write(bi, "png", file);
				return filepath;
	 
			} catch (Exception e) {
				e.printStackTrace();
			}
			return "";
		}
	 
		public static String getDate() {
			SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
			return formatter.format(new Date());
		}
	 
}

5.将这个servlet放在tomcat下,设置开机自启动,就不用去手动启动了

6.设置打印机,安装对应的打印机驱动,设置为默认,设置打印的纸张大小

7.打印成功,样例,看着模糊可以设置图形的打印算法,希望看到的能得到帮助,不足请告知,谢谢

### 回答1: Java Zebra条码打印机SDK是专门为开发人员提供的一个Java软件开发工具包,用于与Zebra品牌的条码打印机进行通信和控制。该SDK提供了一系列的API(应用程序接口),使开发人员能够轻松地集成条码打印功能到自己的Java应用程序中。 使用Java Zebra条码打印机SDK,开发人员可以实现以下功能: 1. 连接和配置打印机:SDK提供了与Zebra打印机进行连接和配置的方法,开发人员可以通过SDK直接与打印机进行通信,设置打印机参数,如打印分辨率、纸张类型和大小等。 2. 创建和打印条码:SDK提供了生成和打印各种类型的条码的方法,如二维码、条形码、QR码等。开发人员可以通过SDK指定条码的内容、尺寸、格式和位置等参数,从而生成和打印出符合需求的条码。 3. 自定义打印模板:SDK支持自定义打印模板,开发人员可以通过SDK指定打印样式、布局和格式等,以满足特定的打印需求。这样,打印出来的条码可以根据需求显示自定义的文本、图像和样式等。 4. 打印预览和设置:SDK还提供了预览和设置打印参数的方法,开发人员可以在实际打印前预览打印效果,并修改打印参数,如字体、颜色和对齐方式等。 总之,Java Zebra条码打印机SDK为开发人员提供了一个简单、快速集成和控制Zebra条码打印机的工具包,使他们能够轻松地在自己的Java应用程序中实现条码打印功能。无论是对于需要批量打印条码的生产环境,还是对于需要实时打印条码的仓储和物流环境,该SDK都能满足开发人员的需求,提升工作效率。 ### 回答2: Java Zebra条码打印机 SDK 是一种用于与Zebra条码打印机进行交互的软件开发工具包。该SDK提供了一系列的Java类和方法,可以轻松地在Java应用程序中实现与Zebra条码打印机的通信和控制。 使用Java Zebra条码打印机 SDK,开发人员可以利用其提供的功能和方法,实现以下操作: 1. 连接和配置打印机:SDK允许开发人员与Zebra条码打印机建立连接,并配置打印机的设置,例如打印分辨率、打印速度、纸张尺寸等。 2. 设计和生成条码:开发人员可以使用SDK提供的方法,生成不同类型的条码,如二维码、条形码等。同时,SDK也支持自定义条码的样式和格式。 3. 打印标签和票据:通过SDK,开发人员可以编写Java代码,实现将生成的条码和其他信息打印在标签或票据上。可以设置打印参数,如打印数量、打印方向等。 4. 监控打印任务:SDK还提供了监控打印任务的功能,开发人员可以获取打印进度、错误信息等,并根据需要进行相应的处理和通知。 总之,Java Zebra条码打印机 SDK是一种方便、灵活的工具,可以帮助开发人员在Java应用程序中快速集成和控制Zebra条码打印机实现自动化的条码打印和管理。 ### 回答3: Java Zebra条码打印机SDK是一种用Java编程语言开发的软件开发工具包(Software Development Kit),用于与Zebra品牌的条码打印机进行交互和控制。 该SDK提供了一系列的类和方法,可以方便地实现条码打印机的功能,例如打印文本、条码、图像等。通过该SDK,开发人员可以轻松地将条码打印机集成到他们的Java应用程序中。 Java Zebra条码打印机SDK具有以下主要特点: 1. 简化操作:该SDK提供了简洁易用的方法和函数,使开发人员能够快速实现打印功能,无需深入了解条码打印机的具体细节。 2. 多种打印选项:开发人员可以使用SDK提供的功能来设置打印参数,例如纸张尺寸、打印方向、打印速度等,以满足不同应用场景的需求。 3. 多种打印格式:SDK支持多种标准条码格式,如Code 39、Code 128、QR码等,并且可以自定义条码样式,以满足不同的条码打印需求。 4. 异常处理:SDK提供了完善的错误处理机制,开发人员可以通过捕捉和处理异常来保证打印过程的稳定性和可靠性。 5. 跨平台支持:Java Zebra条码打印机SDK可以在不同操作系统上运行,包括Windows、Linux和Mac OS等,使开发人员能够在各种环境中使用。 总之,Java Zebra条码打印机SDK为开发人员提供了一种简便而强大的工具,使他们可以轻松实现与Zebra条码打印机的交互和控制,并且可以根据需求进行各种定制和调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值