前言

说下自己的趟坑之路

最近被这个打印机忙的焦头烂额

对于没有硬件任何经验的人来说,一开始是蒙的,热敏打印机根据模板打印出小票来?不都是配套的么, 还需要我们开发?

第一天 按部就班来, 安装驱动,然后搜索网上一大堆,大部分也是 java awt绘制图打印, 最后打印出来了也有二维码,也可以选择哪个打印机来打印,如代码:

import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import java.awt.*;
import java.awt.print.*;public class Prient {public static void main(String[] args) {int height = 250;// 通俗理解就是书、文档Book book = new Book();// 打印格式PageFormat pf = new PageFormat();pf.setOrientation(PageFormat.PORTRAIT);// 通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。Paper p = new Paper();p.setSize(height-20, height);p.setImageableArea(0, 0, height-20, height);pf.setPaper(p);// 把 PageFormat 和 Printable 添加到书中,组成一个页面book.append((g, pageFormat, page) -> {if (page > 0) {return Printable.NO_SUCH_PAGE;}Graphics2D g2d = (Graphics2D) g;g2d.setFont(new Font("Default", Font.PLAIN, 14));g2d.drawString("等位排单号", 50, 10);g2d.drawString("-------------------------------------", 7, 20);g2d.drawString("手机号码:" + "11111111111", 7, 35);g2d.drawString("领号日期:" + "11111", 7, 65);g2d.drawString("-------------------------------------", 7, 80);g2d.setFont(new Font("Default", Font.PLAIN, 25));g2d.drawString("小号", 7, 105);g2d.setFont(new Font("Default", Font.PLAIN, 14));g2d.drawString("您之前还有" + 5 + "桌客人在等待", 7, 130);g2d.drawImage(QrCodeUtils.creatRrCode("http://baidu.com",120,120),50,140,null);return Printable.PAGE_EXISTS;}, pf);
//        // 设置打印属性PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();aset.add(new Copies(1));// 打印份数// 查找所有打印服务PrintService[] services = PrintServiceLookup.lookupPrintServices(null, aset);// 将所有查找出来的打印机与自己想要的打印机进行匹配,找出自己想要的打印机PrintService myPrinter = null;for (int i = 0; i < services.length; i++) {// System.out.println("service found: " + services[i]);String svcName = services[i].toString();if (svcName.contains("80C")) { // 指定打印机//if (svcName.contains("AYZN_Print")) { // 指定打印机//if (svcName.contains("ZMIN X1i")) { // 指定打印机System.out.println("OK");myPrinter = services[i];}}// 获取打印服务对象PrinterJob job = PrinterJob.getPrinterJob();// 获取打印服务对象if (myPrinter != null) {try {job.setPrintService(myPrinter);// 设置打印类job.setPageable(book);// 打印// System.out.println("--》打印数据");job.print();} catch (Exception pe) {pe.printStackTrace();}} else {System.out.println("no printer services found");}}
}

但是仔细一想, 我如此这般,那么以后我的服务端是不是也得安装驱动, 于是下了linux驱动安装一个服务器,百般艰难,如果我以后如此部署,简直要我命呀

第二天 于是找另外一个路子,想到是不是可以不用驱动就可以打印呢, 我当时觉得有点异想天开,没想到一搜真可以, 我先去官网下载了一个c++的dll文件,动态库, 如代码

import com.sun.jna.Library;
import com.sun.jna.Native;public class CallMain
{//动态库类public interface DllInterface extends Library{DllInterface INSTANCE = (DllInterface)Native.loadLibrary("E:\\JsPrinterDll_64.dll", DllInterface.class);int uniConnectNetPortByIp(String ip, int port, int timeout);int uniWrite(int i, String content, int size);int uniTwobarCodes(int fs, String content, int nZoomIn, int nErrorLevel, int bCut);int uniselectCharacterSize(int i, int n);Boolean uniClose(int i);Boolean uniInitNetSev();Boolean uniCloseNetServ();int uniselectChineseCharModel(int i);int uniprintAndFeedLine(int i);}public static void main(String[] args){System.out.println("---------1.简单调用-----------");DllInterface instance = DllInterface.INSTANCE;Boolean init = instance.uniInitNetSev();int con = instance.uniConnectNetPortByIp("10.1.50.115",9100, 5000);if (con > 0) {int si = instance.uniselectCharacterSize(con,100010);int ch = instance.uniselectChineseCharModel(con);String a = "aaaa";instance.uniWrite(con, a, a.length());
//          instance.uniTwobarCodes(con, "https://www.baidu.com",7,1,0);instance.uniWrite(con, "\n\n\n\n\n\n\n\n", 8);boolean b= instance.uniClose(con);}boolean c =instance.uniCloseNetServ();}
}

然后调用类库中的函数,说说遇到的问题, 字体无法放大,不切纸,无法打印汉子,乱码等等,当然应该有解决方案,有些函数我应该没找到,慢慢的一个在解决,最后逐渐崩溃

第三天 不甘心如此这般,继续寻找度娘寻求帮助,还可以socket,拿来一试,妈呀,输出Writer,这不就是所期待的么, 要啥出啥,在去官网下载编程手册,对照写各种想要的,真是皇天不负有心人

正文

根据官方文档编写自定模板,授人以鱼不如授人以渔,后附工具类

去xprinter官网下载开发文档中的编程手册,打开如图

则对应代码:

    public void setUnderline(int val) throws IOException {writer.write(0x1B);//16进制码writer.write("-");//2D 也可writer.write(val);//n的值,当然48/49/50 也可writer.flush();}

其他的详细看文档写出你想要的模板来

不多说了, 剩下的自己研究吧~

附工具类,连接打印机, 并常用模板 打印小票工具类

java 无驱动socket连接热敏小票打印机示例,编写自定义模板 芯烨/xprinter,附工具类即开即用相关推荐

  1. C#并口热敏小票打印机打印位图

    C#并口热敏小票打印机打印位图 原文:C#并口热敏小票打印机打印位图 最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了. 这是DEMO的窗体: 下面是打印所需要 ...

  2. H5网页调用58热敏小票打印机实现打印小票

    在微信公众号和H5网页开发中,常常需要开发调用打印机进行小票打印操作,通常的做法是调用蓝牙打印机,但是蓝牙打印机由于蓝牙连接的原因,往往稳定性差,需要客户端配合才能发挥好的效果,另外蓝牙打印机距离受限 ...

  3. 转:C#并口热敏小票打印机打印位图

    最近一直在研究并口小票打印机打印图片问题,这也是第一次和硬件打交道,不过还好,最终成功了. 这是DEMO的窗体: 下面是打印所需要调用的代码: [html] view plain copy class ...

  4. python调用小票打印机_PyQt5中使用Qprinter打印热敏小票

    在<PyQt5中使用QWebChannel和内嵌网页进行js交互>一文中,我记录了如何使用QWebchannel与内嵌网页进行js交互,其根本目标在于使用Qt5调起打印机服务.在这篇文章中 ...

  5. java热敏POS打印机编程

    今天有时间,就整理一下关于java控制热敏POS打印机的一些注意事项,不然怕以后会忘记. 所谓热敏POS打印机,就是小超市的小票打印机.对于此打印机,我也只是半懂而已,如以下说的不对的地方,还请指正. ...

  6. python打印小票_PyQt5中使用Qprinter打印热敏小票

    在<PyQt5中使用QWebChannel和内嵌网页进行js交互>一文中,我记录了如何使用QWebchannel与内嵌网页进行js交互,其根本目标在于使用Qt5调起打印机服务.在这篇文章中 ...

  7. Java之使用socket连接http接口

    Java之使用socket连接http接口 代码 总结 参考 代码 public static void execute() throws IOException {StringBuffer requ ...

  8. 为什么从网页上打印怎们好像被缩放_便捷高效低成本,映美热敏云打印机CTP-180UWE体验...

    打印机的分好几种,喷墨.激光.针式.热敏,还有之前火过一阵子的3D打印机等,前面三种我们公司都有在用,我同事打印单据都喜欢用针式,因为激光打印机出来的都是A4,太大了,也浪费.但是针式打印机速度很慢, ...

  9. java在线支付---04_编写易宝支付的客户端加密工具类

    2013/5/30 04_编写易宝支付的客户端加密工具类 创梦综合技术qq交流群:CreDream:251572072 ---------------------------------------- ...

  10. Java中Date类型如何向前向后滚动时间,( 附工具类)

    Java中的Date类型向前向后滚动时间(附工具类) 废话不多说,先看工具类: 1 import java.text.SimpleDateFormat; 2 import java.util.Cale ...

最新文章

  1. SQL2005学习(九),将数据库备份到网络共享文件夹中
  2. 阿里云服务器配置开发环境第一章:Centos7.3安装git 和 zsh
  3. 液晶显示屏怎么显示泰文_液晶显示屏概念股大涨 液晶显示屏概念股一览表
  4. [转]配置子报表和钻取报表
  5. buu 凯撒?替换?呵呵!
  6. 网页按钮跳转位置_阻止safari从网页跳转至app
  7. 学习java第一步_Spring Boot 学习第一步(搭建初步环境)
  8. DGL_图的创建、保存、加载
  9. 使用函数统计指定c语言,浙大版《C语言程序设计(第3版)》题目集 习题5-5 使用函数统计指定数字的个数...
  10. windows安装安卓开发环境Eclipse+SDK+ADT
  11. 安装计算机主板应注意,组装计算机并仅更换主板时要注意的事项
  12. 小学计算机纸牌教案,小学信息技术《玩好纸牌》教案
  13. Listener监听器已经Listener的小案例
  14. Android ANR原因以及开发时如何预防
  15. SU处理野外地震数据常用命令
  16. 泰凌微8258入门教程 环境篇③——Telink BDT烧录下载
  17. 金山词霸2010牛津旗舰破解版【最完美的】的使用方案
  18. unity教程:MMORPG网络游戏如何实现玩家同步
  19. poj 1815 最小点割集
  20. 机器学习算法-EM算法

热门文章

  1. python源代码编译后的文件扩展名-python源代码被解释器转换后的格式是什么?
  2. Python在线考试系统源代码
  3. python导入鸢尾花数据集_python可视化分析鸢尾花数据集
  4. 【数学模型】银行贷款计算系统含Matlab源码
  5. dubboX提供rest服务
  6. 计算机网络实验指导书 pdf,计算机网络实验指导书(新版).pdf
  7. 游戏挂机时计算机设置在哪里,蜂窝助手怎么挂机 游戏蜂窝电脑版挂机设置教程...
  8. 115-RTKLIB及GAMP中PPP的随机模型
  9. 【Android工具】更新Yandex有道云笔记网页剪辑插件测试正常!可以安装PCchrome插件的手机浏览器!...
  10. mac卸载mysql