打印机 https://www.cnblogs.com/z-y-h-s/p/15223630.html

参考:https://www.cnblogs.com/z-y-h-s/p/15223630.html

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("***************** 没有打印设备 ****************");

        }

    }<br><br>

    /**

     * 设置数据模型,设定打印模式

     */

    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;

    }


}

A版)(2614)

2. JAVA中计算经纬度之间的距离(906)

3. 支付宝退款(JAVA版)(713)

4. 在JSP页面中进行判断(699)

5. JAVA中通过oshi 获取系统和硬件信息(477)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容