java调用i5100-300驱动连接打印机打印标签
一、前期准备
- java jdk为11
- 保证本机已经安装i5100-300的打印机驱动
- 保证本机能拼通打印机的ip地址
相关配置可查看下面的文章
i5100-300打印机驱动的安装与配置
二、pom文件依赖及其配置
<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><dependencies><dependency><groupId>org.openjfx</groupId><artifactId>javafx-controls</artifactId><version>11</version></dependency><dependency><groupId>org.openjfx</groupId><artifactId>javafx-fxml</artifactId><version>11</version></dependency><dependency><groupId>com.jfoenix</groupId><artifactId>jfoenix</artifactId><version>9.0.9</version></dependency><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.5.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version></dependency></dependencies>
三、i5100-300的模板类
package com.yq.printer;import javax.print.*;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.LocalDate;
import java.util.logging.Level;
import java.util.logging.Logger;/*** i5100 打印机模板* @author **/
public class TemplateI5100{private static Logger log = Logger.getLogger(TemplateI5100.class.getName());/*** {"module":"printer","value":{"title":"粪便样本普通标签打印(已选10个)","number":1,"printer":"i5100",labels:[{"template":2,contents:["WAOI2T001","张三","北师大","粪便"]}]}}* @return*/public int print(String printer, String... param) {DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;PrintService printService = getPrintService(printer,flavor);if (printService == null) {return 2;}DocPrintJob job = printService.createPrintJob();StringBuilder sb = new StringBuilder();sb.append("m m\n");sb.append("J\n");sb.append("S l1;3,0,12,15,51\n");sb.append("B 23.4, 1.8,0,code128,4,0.15;").append("[U:CODEA]"+ param[0] + "\n");// 打印文字String date = param.length > 5 ? param[5] : LocalDate.now().toString();sb.append("T 29.0,1.4,0,3,2.0;").append(param[0] + "\n");sb.append("T 22.0,7.5,0,1000,pt4;姓名:").append(param[1] + "\n");sb.append("T 22.0,9.5,0,1000,pt4;日期:").append(date+ "\n");sb.append("T 35,7.5,0,1000,pt4;站点:").append(param[2] + "\n");sb.append("T 35,9.5,0,1000,pt4;类型:").append(param[3] + "\n");sb.append("B 10.6,2.2,0,DATAMATRIX+ROWS14+COLS14,0.4;").append(param[0]).append("\n");sb.append("A ");sb.append(param[4] + "\n");ByteArrayInputStream bis = new ByteArrayInputStream(sb.toString().getBytes(StandardCharsets.UTF_8));DocAttributeSet das = new HashDocAttributeSet();Doc doc = new SimpleDoc(bis, flavor, das);try {bis.close();job.print(doc, null);} catch (IOException | PrintException e) {log.log(Level.SEVERE, e.getMessage(),e);return 2;}return 0;}private PrintService getPrintService(String printer,DocFlavor flavor) {PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();PrintService[] printServices = PrintServiceLookup.lookupPrintServices(flavor, pras);for (PrintService ps : printServices) {if (ps.getName().equals(printer)) {return ps;}}return null;}
}
四、测试类
package com.yq.controller;import com.yq.printer.TemplateI5100;import javax.print.DocFlavor;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;/*** @author * @date 2021/9/10 14:31*/
public class TestController {/*** 获取打印机的驱动名称* @return*/public static String getPrinter() {PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;PrintService[] printServices = PrintServiceLookup.lookupPrintServices(flavor, pras);// 模糊匹配for (PrintService printService : printServices) {if(printService.getName().startsWith("i5100-300")){return printService.getName();}}return null;}public static void main(String[] args) {String printer = getPrinter();TemplateI5100 templateI5100 = new TemplateI5100();String [] params = new String[5];params[0] = "12E45F7G9";params[1] = "路飞";params[2] = "海贼王大学";params[3] = "EDTA-2";params[4] = "3";templateI5100.print(printer,params);}
}
五、成功
六、其他驱动模板(仅供参考,没有相关打印机的条件未测试)
1. I5100Box
package com.yq.printer;import javax.print.*;
import javax.print.attribute.DocAttributeSet;
import javax.print.attribute.HashDocAttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.logging.Level;
import java.util.logging.Logger;/*** i5100 打印机模板**/
public class TemplateI5100Box {private static Logger log = Logger.getLogger(TemplateI5100Box.class.getName());/*** {"module":"printer","value":{"title":"测试","number":1,"printer":"i5100",labels:[{"template":1,contents:["XF00000001","测试"]}]}}** @return*/public int print(String printer, String... param) {DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;PrintService printService = getPrintService(printer, flavor);if (printService == null) {return 2;}DocPrintJob job = printService.createPrintJob();StringBuilder sb = new StringBuilder();sb.append("m m\n");sb.append("J\n");//S[ptype;]xo,yo,ho,dy,wd[,dx,col][;name]CRsb.append("S l1;3,0,12,15,51\n");// 打印文字sb.append("T 31,1.4,0,1000,pt5;").append(param[1] + "\n");// code小写则不打印编码,大写则打印sb.append("B 26.8, 2.0,0,code128,6,0.2;").append(param[0] + "\n");// 打印编码sb.append("T 31.5,9.5,0,3,pt5;").append(param[0] + "\n");//圆上的 Data matrix 原X6.5 原"B 7.8,1.3,0,DATAMATRIX+ROWS20+COLS20,0.3;"sb.append("B 10.6,2.2,0,DATAMATRIX+ROWS14+COLS14,0.4;").append(param[0]).append("\n");sb.append("A 1\n");ByteArrayInputStream bis = new ByteArrayInputStream(sb.toString().getBytes(StandardCharsets.UTF_8));DocAttributeSet das = new HashDocAttributeSet();Doc doc = new SimpleDoc(bis, flavor, das);try {bis.close();job.print(doc, null);} catch (IOException | PrintException e) {log.log(Level.SEVERE, e.getMessage(),e);return 2;}return 0;}private PrintService getPrintService(String printer, DocFlavor flavor) {PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();PrintService[] printServices = PrintServiceLookup.lookupPrintServices(flavor, pras);for (PrintService ps : printServices) {if (ps.getName().equals(printer)) {return ps;}}return null;}
}
2. BBP12 驱动打印机
package com.yq.printer;import com.sun.jna.Library;
import com.sun.jna.Native;/****/
public interface TscLibDll extends Library {TscLibDll INSTANCE = Native.load("TSCLIB", TscLibDll.class);/*** Display the DLL version on the screen** @return*/int about();/*** Start the Windows printer spool** @param pirnterName* @return*/int openport(String pirnterName);/*** Close Windows printer spool** @return*/int closeport();/*** 发送指令** @param printerCommand 打印指令(TSPL)* @return*/int sendcommand(String printerCommand);/*** Set up label width, label height, print speed, print density, sensor type,* gap/black mark vertical distance、gap/black mark shift distance** @param width sets up label width; unit: mm* @param height sets up label height; unit: mm* @param speed sets up print speed, (selectable print speeds vary on* different printer models)* @param density sets up print density 0-15* @param sensor sets up the sensor type to be used (0 gap/1 black mark)* @param vertical sets up vertical gap height of the gap/black mark; unit: mm* @param offset sets up shift distance of the gap/black mark; unit:: mm; in* the case of the average label, set this parameter to be 0* @return*/int setup(String width, String height, String speed, String density, String sensor, String vertical, String offset);/*** Download pcx file** @param filename* @param imageName* @return*/int downloadpcx(String filename, String imageName);/*** Use built-in bar code formats to print** @param x the starting point of the bar code along the X direction,* given in points* @param y the starting point of the bar code along the Y direction,* given in points* @param type type of code* @param height sets up bar code height, given in points* @param readable sets up whether to print human recognizable interpretation* (text) or not* @param rotation sets up rotation degrees* @param narrow sets up narrow bar ratio, refer to TSPL user's manual* @param wide sets up narrow bar ratio, refer to TSPL user's manual* @param code content* @return*/int barcode(String x, String y, String type, String height, String readable, String rotation, String narrow,String wide, String code);/*** Use printer built-in fonts to print* @param x the starting point of the bar code along the X direction,* given in points* @param y the starting point of the bar code along the Y direction,* given in points* @param fonttype* @param rotation* @param xmul* @param ymul* @param text* @return*/int printerfont(String x, String y, String fonttype, String rotation, String xmul, String ymul, String text);/*** Clear** @return*/int clearbuffer();/*** Print label content* @param set sets up the number of label sets* @param copy sets up the number of print copies* @return*/int printlabel(String set, String copy);/*** Skip to next page (of label); this function is to be used after setup** @return*/int formfeed();/*** disable the backfeed function** @return*/int nobackfeed();/*** Use Windows font to print text.** @param x* @param y* @param fontheight* @param rotation* @param fontstyle* @param fontunderline* @param szFaceName* @param content* @return*/int windowsfont(int x, int y, int fontheight, int rotation, int fontstyle, int fontunderline, String szFaceName,String content);/*** Use Windows font to print Unicode text.** @param x* @param y* @param fontheight* @param rotation* @param fontstyle* @param fontunderline* @param szFaceName* @param content* @return*/int windowsfontUnicode(int x, int y, int fontheight, int rotation, int fontstyle, int fontunderline,String szFaceName, byte[] content);}
package com.yq.printer;import java.time.LocalDate;/*** 模板1, 普通标签打印* <p>标签内容包含条码和二维码</p>* <p>使用bbp12打印机</p>**/
public class TemplateBbp12{/*** {"module":"printer","value":{"title":"粪便样本普通标签打印(已选10个)","number":1,"printer":"Brady",labels:[{"template":1,contents:["WAOI2T001","张三","北师大","粪便"]}]}}*/public int print(String printer, String... param) {// 调用设备Brady BBP12 是设备的名称TscLibDll.INSTANCE.openport(printer);// 打印前先清理下缓存TscLibDll.INSTANCE.clearbuffer();// 设置标签参数,包括标签纸的大小,纸张间隔大小,打印机的速度,打印机浓度等;
// TscLibDll.INSTANCE.setup("41", "9.5", "4", "12", "0", "3", "0");TscLibDll.INSTANCE.setup("35", "15", "4", "12", "0", "3", "0");// 设置jna.encoding 是防止在dll过程中中文乱码System.setProperty("jna.encoding", "GBK");// 如果日期不传的话,默认使用本地日期String date = param.length > 4 ? param[4] : LocalDate.now().toString();// 打印条码 待调试 x原195 "175", "18", "128", "35", "0", "0", "2", "2",//指定为code128A的情况,解决因为编号后面超过2位数字因而使用CODE128C导致条形码缩短的情况TscLibDll.INSTANCE.barcode("60", "40", "128M", "60", "0", "0", "2", "2", "!101"+param[0]);// 打印编号 原228为X位置,大概30==》1mm 待调试252 -2TscLibDll.INSTANCE.printerfont("132", "-8", "3", "0", "1", "1", param[0]);String font = "Arial";TscLibDll.INSTANCE.windowsfont(40, 110, 26, 0, 2, 0, font, "姓名:" + param[1]);TscLibDll.INSTANCE.windowsfont(190, 110, 26, 0, 2, 0, font, "站点:" + param[2]);TscLibDll.INSTANCE.windowsfont(40, 138, 26, 0, 2, 0, font, "日期:" + date);TscLibDll.INSTANCE.windowsfont(220, 138, 26, 0, 2, 0, font, "类型:" + param[3]);// 在圆上打印data matrix码 原"DMATRIX 40,6,80,80,x4,20,20,\""// 设置打印多少张TscLibDll.INSTANCE.printlabel("1", "1");TscLibDll.INSTANCE.closeport();return 0;}
}
java调用i5100-300驱动连接打印机打印标签相关推荐
- Java中使用mysql驱动连接mysql以及mysql的安装
好久不见,随着Java课程的推进小编其实也在不断的学习之中,同时也遇到很多问题,下面就由小编为大伙们详细的说一下Java中使用mysql驱动连接mysql数据库以及mysql的安装以及使用数据库连接池 ...
- java调用 火眼臻睛,连接创新,发现未来,臻识科技受邀CCF-GAIR,论道浪潮之巅...
2017 年 7 月 7 日,"CCF-GAIR 2017人工智能与机器人峰会"将在深圳隆重举行.作为目前为止范围内人工智能领域规格的峰会,CCF-GAIR以"人工智能与 ...
- java 调用 dll 乱码_java调用c++ dll出现中文乱码
最近的开发用到了使用java调用本机动态连接库的功能,将文件路径通过java调用C++代码对文件进行操作.在调用中如果路径中包含有中文字符就会出现问题,程序运行就会中止.下面用一个小例子,来说明记录下 ...
- android调用 qt so文件路径,Android Java调用Qt写的so库
有时候,我们反编译apk得到一个so库,如果直接使用这个so库的话,必须使用原来so库同样的package名字,才能用.这样人家反编译你的apk,就知道你侵犯了人家的版权.为了达到混淆的目的,我们可以 ...
- java使用佳博打印机打印标签
文章目录 1.前言 1.1打印机型号及驱动说明 1.2背景概要 2.填坑 3.上代码 1.项目截图 2.==中文打印需要注意两点== 3.项目源码 4.总结 1.前言 1.1打印机型号及驱动说明 打印 ...
- java调用zebra_java调用斑马GK888t打印机(ZPL指令)
在项目中使用斑马打印机遇到了如下问题: 在实际打印信息前,需要修改打印机驱动设置,主要是设置打印颜色深度,默认值一般会打印的比较浅.通常情况下,在设置的颜色深度后,打印机能够很好的工作.但是如果我将程 ...
- Java调用小票打印机(型号TM-288B)打印小票 (上)
Java调用小票打印机(型号TM-288B)打印小票 (上) 项目需求需要用Java调用小票打印机打印小票,网上查了很多资料然后慢慢调试最后算成功了 本地安装小票打印机驱动 根据自己的型号下载驱动(此 ...
- Java调用打印机读写文件
最近跟着项目组在做项目,分到了打印机这个任务,顺便记录一下. 首先本地最好安装一下打印机的驱动,然后连上打印机开始测试! Java调用打印机打印图片,文本都是很简单的,如下代码: /*** 通过 IP ...
- Java调用TSC打印机进行打印
最近项目中用到了打印机,最开始的完全不懂,现在弄好了,所以做了总结,该篇包括后台的调用打印(两种方式)跟前端的js的打印,但是只有IE现在支持打印,而且如果想远程连接打印机,二维码的生成和直接由打印机 ...
最新文章
- linux下history(历史)命令用法详解
- 科研超级神器,摘要页一键链接关联论文
- 6 种不同情况下写的代码
- c语言表达式和表达式语句的区别,C语言中表达式和表达式语句的区别(什么又叫做表达式)?...
- IAR J-Link下载程序出现错误提示:Failed to get CPU status after 4 retries Retry?
- C++扬帆远航——3(打印图形)
- [笔试题目] 腾讯2015年9月基础研究笔试题
- 音视频技术的高光时刻: LiveVideoStackCon 2019上海 音视频技术大会
- python三大特征六大原则_面向对象程序设计(Object Oriented Programming)的三大特性,六大原则...
- kali linux 2.0 ssh,Kali 2.0使用SSH进行远程登录(示例代码)
- C、C++和MFC中文件的操作
- SAP License:在产品结算参数设置
- 前端MVC Vue2学习总结(八)——前端路由
- 软件测试-微信红包测试点
- js split 正则分割字符串
- 基于C#和遥感软件二次开发的宜居度综合方法
- 移动互联网(一)短信和彩信等接口开发封装
- html在线表情聊天功能,HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
- 使用PHP实现Namesilo动态解析DDNS
- excel 导出加水印
热门文章
- 三流员工熬时间,二流员工拼执行,一流员工靠什么?
- php mds函数,MDS分类- 血液病百科 - Powered by HDWiki!
- MATLAB开机问候语之程序开发-山东标梵
- 【观察】看懂微软Ignite China技术大会:左手混合工作,右手混合多云
- 如何制作动画视频,用它准没错 | 万彩动画大师
- 如何在CDR中制作半透明倒影
- 吐槽表情包计算机系,分享工学各专业的吐槽集锦,快来收割表情包了!
- android文件搜索器
- 水手猴子和椰子程序matlab,济南少儿编程:编程巧解奥数题 - 水手分椰子,作为家长的你会吗?~山东少儿编程~少儿编程...
- WinCE 访问服务器SqlServer