IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java 无驱动socket连接热敏小票打印机示例,编写自定义模板 芯烨/xprinter,附工具类即开即用 -> 正文阅读

[Java知识库]java 无驱动socket连接热敏小票打印机示例,编写自定义模板 芯烨/xprinter,附工具类即开即用

前言

说下自己的趟坑之路

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

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

第一天 按部就班来,?安装驱动,然后搜索网上一大堆,大部分也是?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知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-14 23:36:51  更:2022-04-14 23:41:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:22:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码