JAVA控制热敏打印机
作者:互联网
常用的打印机有两种连接方式,第一种是 网线版(使用网线版打印机,需要在同一网段下进行) 另一种是 USB 连接方式的打印机。
以我使用的两台芯烨品牌打印机(58mmUSB打印机和,80mm的网线打印机)为例, 芯烨打印机的驱动下载地址: https://www.xprinter.net/ ,根据不同打印机型号,下载相对应的打印机驱动。
一.网线打印机
1.准备工作
网线连接打印机后,需知道打印机的网络地址,这里以我使用的打印机为例,不同打印机可能操作不同,操作可见打印机说明书(按走纸键三秒后打开打印机开关,即可打印出当前打印机信息,其中包含ip地址)。
2.配置驱动
拿到ip地址后,安装打开官网下载的驱动,选择以太网(如下图),
输入刚才打印纸中的IP地址,安装完成之后,打开电脑的设置,找到设备 - 打印机,
即可看到刚才安装的打印机,选中打印机 查看打印机属性,
点击打印测试页,打印机工作,即表示安装正常。
二.USB打印机
1.准备工作,
使用USB打印机连接电脑。
2.配置驱动,下载安装响应的驱动,选择USB,
继续安装完成之后,与网线检测方法一致,打开电脑的设置,找到设备 - 打印机 ,查看打印机属性 ,点击打印测试页,打印机工作,即表示安装正常。
三.JAVA代码
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.util.ArrayList; import java.util.List; /** * @description: 打印订单详情 * @author: zyh * @time: 2019/3/17 17:07 */ public class Print implements Printable{ // 菜品集合 public static List testList = new ArrayList(); // 设置小票打印 public int print(Graphics g, PageFormat pf, int page) throws PrinterException { if (page > 0) { return NO_SUCH_PAGE; } Graphics2D g2d = (Graphics2D) g; // 设置颜色 g2d.setColor(Color.BLACK); //模式 字体 字体大小 g2d.setFont(new Font("Default", Font.PLAIN, 16)); // 参数1:显示内容 参数2:横向偏移 参数3:纵向偏移 g2d.drawString("××××订单", 35, 50); g2d.setFont(new Font("Default", Font.PLAIN, 12)); g2d.drawString("------------------------------------------------", 0, 70); g2d.drawString("桌号:A1", 0, 90); g2d.drawString("人数:5", 0, 110); g2d.drawString("用户信息:15514769010", 0, 130); g2d.drawString("------------------------------------------------", 0, 150); g2d.drawString("订单详情", 0, 170); g2d.drawString("菜品 单价 小计", 0, 190); //行高 int H1 = 190; //总金额 double sunMoney = 0; //序号 int count = 0; List<Test> tests =getTestList(); for (Test test : tests) { count = count + 1; H1 = H1 + 20; sunMoney = test.getMoney() * test.getNum() + sunMoney; g2d.setFont(new Font("Default", Font.PLAIN, 8)); g2d.drawString(count + "." + test.getName() + "*" + test.getNum() + " ¥" + test.getMoney()+" ¥"+test.getMoney()*test.getNum(), 0, H1); } g2d.setFont(new Font("Default", Font.PLAIN, 10)); g2d.drawString("------------------------------------------------", 0, H1+20); g2d.drawString("总计商品数: 4", 0, H1+40); g2d.drawString("订单金额: 447.98", 0, H1+60); g2d.drawString("应付金额: 400.98", 0, H1+80); g2d.drawString("------------------------------------------------", 0, H1+100); g2d.drawString("订单编号: WW46789874552214", 0, H1+120); g2d.drawString("下单时间: 2021-04-09 11:11:11", 0, H1+140); g2d.drawString("核销时间: 2021-04-09 12:33:45", 0, H1+160); g2d.drawString("------------------------------------------------", 0, H1+180); g2d.drawString("订单备注内容: 这里是对于订单内容的备注信息", 0, H1+200); g2d.drawString("------------------------------------------------", 0, H1 + 220); g2d.drawString("感谢你选择【××××××××】", 0, H1+240); g2d.drawString(" 欢迎你再次光临!", 0, H1+255); return PAGE_EXISTS; } //打印的商品集合 public static List getTestList() { return testList; } //打印的商品集合 public static void setTestList(List testList) { Prient.testList = testList; } }
import java.awt.print.Book; import java.awt.print.PageFormat; import java.awt.print.Paper; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.util.ArrayList; import java.util.List; import java.util.Scanner; import javax.print.DocFlavor; import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.print.attribute.HashAttributeSet; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.standard.PrinterName; /** * @description: * @author: zyh * @time: 2021/3/17 17:13 */ public class MainTest { public static DocFlavor psInFormat = DocFlavor.INPUT_STREAM.AUTOSENSE; public static HashPrintRequestAttributeSet hashPrintRequestAttributeSet = new HashPrintRequestAttributeSet(); public static PrintService printService[] = PrintServiceLookup.lookupPrintServices(psInFormat, hashPrintRequestAttributeSet); public static void main(String[] args) { System.out.println("================== 当前的打印设备列表为 =================="); if(printService.length > 0){ for (int i = 0; i < printService.length; i++) { System.out.println(printService[i]); } //我们指定要进行打印的打印机 ,此名称为电脑中设备中打印机的名称 dataModel58("XP-58"); dataModel80("XP-80C"); }else { System.out.println("***************** 没有打印设备 ****************"); } }
/** * 设置数据模型,设定打印模式 */ public static void dataModel58(String printName){ //这里是测试用的自定义数据数据 List testList = new ArrayList(); Test t1 = new Test("麻辣牛肉", 23.00, 2); Test t2 = new Test("麻辣牛肉", 23.00, 4); Test t3 = new Test("精品千层肚", 24.00, 3); Test t4 = new Test("麻辣牛肉", 23.00, 2); testList.add(t1); testList.add(t2); testList.add(t3); testList.add(t4); //设置小票模型菜品集合 Prient.setTestList(testList); //定义纸张高度 int height = 200 + (testList.size() * 20) + 290; //通俗理解就是书、文档 Book book = new Book(); //打印格式 PageFormat pf = new PageFormat(); //原点在纸张的左上方,x 指向右方,y 指向下方。 pf.setOrientation(PageFormat.PORTRAIT); //通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。 Paper p = new Paper(); //页面宽度 页面高度 p.setSize(550, height); //x轴 y轴 宽度 高度 p.setImageableArea(0, 0, 550, height); pf.setPaper(p); //把 PageFormat 和 Printable 添加到书中,组成一个页面 book.append(new Prient(), pf); //指定打印机打印(printerName打印机名称) HashAttributeSet hs = new HashAttributeSet(); String printerName = printName; hs.add(new PrinterName(printerName, null)); PrintService[] pss = PrintServiceLookup.lookupPrintServices(null, hs); //获取打印服务对象 PrinterJob job = PrinterJob.getPrinterJob(); //写入书 job.setPageable(book); try { //添加指定的打印机 job.setPrintService(specifyPrinter(printName)); //打印执行 job.print(); } catch (PrinterException e) { System.out.println("打印出现异常:" +e); } } /** * 设置数据模型,设定打印模式 */ public static void dataModel80(String printName){ //这里是测试用的数据,自己定义就好了 List testList = new ArrayList(); Test t1 = new Test("麻辣牛肉", 23.00, 2); Test t2 = new Test("麻辣牛肉", 23.00, 4); Test t3 = new Test("精品千层肚", 24.00, 3); Test t4 = new Test("麻辣牛肉", 23.00, 2); testList.add(t1); testList.add(t2); testList.add(t3); testList.add(t4); //设置小票模型菜品集合 PrintOther.setTestList(testList); //定义纸张高度 int height = 200 + (testList.size() * 20) + 300; //通俗理解就是书、文档 Book book = new Book(); //打印格式 PageFormat pf = new PageFormat(); //原点在纸张的左上方,x 指向右方,y 指向下方。 pf.setOrientation(PageFormat.PORTRAIT); //通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。 Paper p = new Paper(); //页面宽度 页面高度 p.setSize(780, height); //x轴 y轴 宽度 高度 p.setImageableArea(0, 0, 780, height); pf.setPaper(p); //把 PageFormat 和 Printable 添加到书中,组成一个页面 book.append(new PrintOther(), pf); //指定打印机打印(printerName打印机名称) HashAttributeSet hs = new HashAttributeSet(); String printerName = printName; hs.add(new PrinterName(printerName, null)); PrintService[] pss = PrintServiceLookup.lookupPrintServices(null, hs); //获取打印服务对象 PrinterJob job = PrinterJob.getPrinterJob(); //写入书 job.setPageable(book); try { //添加指定的打印机 job.setPrintService(specifyPrinter(printName)); //打印执行 job.print(); } catch (PrinterException e) { System.out.println("打印出现异常:" +e); } } /** * 获取打印服务,如果找不到,则使用默认打印机 * @param printerName * @return */ public static PrintService specifyPrinter(String printerName) { PrintService myPrinter = null; for (PrintService printService2 : printService) { String svcName = printService2.toString(); if (svcName.contains(printerName)) { myPrinter = printService2; break; } } if (myPrinter == null) { System.out.println("***************** 使用默认设备开始打印 *****************"); myPrinter = PrintServiceLookup.lookupDefaultPrintService(); } return myPrinter; } }
如有错误,欢迎指正,请联系WX:15514769010
标签:打印机,JAVA,热敏,testList,g2d,drawString,new,import 来源: https://www.cnblogs.com/z-y-h-s/p/15223630.html