一、前期准备

  1. java jdk为11
  2. 保证本机已经安装i5100-300的打印机驱动
  3. 保证本机能拼通打印机的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驱动连接打印机打印标签相关推荐

  1. Java中使用mysql驱动连接mysql以及mysql的安装

    好久不见,随着Java课程的推进小编其实也在不断的学习之中,同时也遇到很多问题,下面就由小编为大伙们详细的说一下Java中使用mysql驱动连接mysql数据库以及mysql的安装以及使用数据库连接池 ...

  2. java调用 火眼臻睛,连接创新,发现未来,臻识科技受邀CCF-GAIR,论道浪潮之巅...

    2017 年 7 月 7 日,"CCF-GAIR 2017人工智能与机器人峰会"将在深圳隆重举行.作为目前为止范围内人工智能领域规格的峰会,CCF-GAIR以"人工智能与 ...

  3. java 调用 dll 乱码_java调用c++ dll出现中文乱码

    最近的开发用到了使用java调用本机动态连接库的功能,将文件路径通过java调用C++代码对文件进行操作.在调用中如果路径中包含有中文字符就会出现问题,程序运行就会中止.下面用一个小例子,来说明记录下 ...

  4. android调用 qt so文件路径,Android Java调用Qt写的so库

    有时候,我们反编译apk得到一个so库,如果直接使用这个so库的话,必须使用原来so库同样的package名字,才能用.这样人家反编译你的apk,就知道你侵犯了人家的版权.为了达到混淆的目的,我们可以 ...

  5. java使用佳博打印机打印标签

    文章目录 1.前言 1.1打印机型号及驱动说明 1.2背景概要 2.填坑 3.上代码 1.项目截图 2.==中文打印需要注意两点== 3.项目源码 4.总结 1.前言 1.1打印机型号及驱动说明 打印 ...

  6. java调用zebra_java调用斑马GK888t打印机(ZPL指令)

    在项目中使用斑马打印机遇到了如下问题: 在实际打印信息前,需要修改打印机驱动设置,主要是设置打印颜色深度,默认值一般会打印的比较浅.通常情况下,在设置的颜色深度后,打印机能够很好的工作.但是如果我将程 ...

  7. Java调用小票打印机(型号TM-288B)打印小票 (上)

    Java调用小票打印机(型号TM-288B)打印小票 (上) 项目需求需要用Java调用小票打印机打印小票,网上查了很多资料然后慢慢调试最后算成功了 本地安装小票打印机驱动 根据自己的型号下载驱动(此 ...

  8. Java调用打印机读写文件

    最近跟着项目组在做项目,分到了打印机这个任务,顺便记录一下. 首先本地最好安装一下打印机的驱动,然后连上打印机开始测试! Java调用打印机打印图片,文本都是很简单的,如下代码: /*** 通过 IP ...

  9. Java调用TSC打印机进行打印

    最近项目中用到了打印机,最开始的完全不懂,现在弄好了,所以做了总结,该篇包括后台的调用打印(两种方式)跟前端的js的打印,但是只有IE现在支持打印,而且如果想远程连接打印机,二维码的生成和直接由打印机 ...

最新文章

  1. linux下history(历史)命令用法详解
  2. 科研超级神器,摘要页一键链接关联论文
  3. 6 种不同情况下写的代码
  4. c语言表达式和表达式语句的区别,C语言中表达式和表达式语句的区别(什么又叫做表达式)?...
  5. IAR J-Link下载程序出现错误提示:Failed to get CPU status after 4 retries Retry?
  6. C++扬帆远航——3(打印图形)
  7. [笔试题目] 腾讯2015年9月基础研究笔试题
  8. 音视频技术的高光时刻: LiveVideoStackCon 2019上海 音视频技术大会
  9. python三大特征六大原则_面向对象程序设计(Object Oriented Programming)的三大特性,六大原则...
  10. kali linux 2.0 ssh,Kali 2.0使用SSH进行远程登录(示例代码)
  11. C、C++和MFC中文件的操作
  12. SAP License:在产品结算参数设置
  13. 前端MVC Vue2学习总结(八)——前端路由
  14. 软件测试-微信红包测试点
  15. js split 正则分割字符串
  16. 基于C#和遥感软件二次开发的宜居度综合方法
  17. 移动互联网(一)短信和彩信等接口开发封装
  18. html在线表情聊天功能,HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
  19. 使用PHP实现Namesilo动态解析DDNS
  20. excel 导出加水印

热门文章

  1. 三流员工熬时间,二流员工拼执行,一流员工靠什么?
  2. php mds函数,MDS分类- 血液病百科 - Powered by HDWiki!
  3. MATLAB开机问候语之程序开发-山东标梵
  4. 【观察】看懂微软Ignite China技术大会:左手混合工作,右手混合多云
  5. 如何制作动画视频,用它准没错 | 万彩动画大师
  6. 如何在CDR中制作半透明倒影
  7. 吐槽表情包计算机系,分享工学各专业的吐槽集锦,快来收割表情包了!
  8. android文件搜索器
  9. 水手猴子和椰子程序matlab,济南少儿编程:编程巧解奥数题 - 水手分椰子,作为家长的你会吗?~山东少儿编程~少儿编程...
  10. WinCE 访问服务器SqlServer