Java获取配置打印机,并(佳博打印机)打印小票

因项目需求,需要打印类似超市的收银小票。

贴上代码,以供记录和参考。

一:获取电脑本地所有的打印服务。

@RequestMapping("/getPrint")
    @ResponseBody
    public Object getPrint(){
        PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet();
        DocFlavor flavor = DocFlavor.BYTE_ARRAY.PNG;
        PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor,printRequestAttributeSet );
        //获取打印机列表
        List<String> printList = new ArrayList<>();
        for (int i = 0;i<printService.length;i++){
            printList.add(printService[i].getName());
        }
        return new ReportResponse(printList);
    }

返回结果:

{
    "header": {
        "code": "200",
        "memo": "success"
    },
    "result": [
        "Microsoft XPS Document Writer",
        "GP-U80250 Series",
        "Fax"
    ]
}

二:打印小票。

1:配置打印机

 

public class Printer {
    private SalesTicket salesTicket;

    public Printer(SalesTicket salesTicket) {
        this.salesTicket = salesTicket;
    }

    public void printer(String printerName) {
        //Book 类提供文档的表示形式,该文档的页面可以使用不同的页面格式和页面 painter
        //要打印的文档
        Book book = new Book();
        //PageFormat类描述要打印的页面大小和方向
        //初始化一个页面打印对象
        PageFormat pf = new PageFormat();
        //设置页面打印方向,从上往下,从左往右
        pf.setOrientation(PageFormat.PORTRAIT);
        //设置打印纸页面信息。通过Paper设置页面的空白边距和可打印区域。必须与实际打印纸张大小相符。
        Paper paper = new Paper();
        MediaSize mediaSize = new MediaSize(80, 3276, MediaPrintableArea.MM);
        //paper.setSize(200,30000);// 纸张大小
        //paper.setImageableArea(0,0,200,30000);// A4(595 X 842)设置打印区域,其实0,0应该是72,72,因为A4纸的默认X,Y边距是72
        paper.setSize((double) mediaSize.getX(25400) * 72.0D, (double) mediaSize.getY(25400) * 72.0D);
        paper.setImageableArea(0.0D, 0.0D, paper.getWidth(), paper.getHeight());
        pf.setPaper(paper);
        book.append(salesTicket, pf);
        HashAttributeSet hs = new HashAttributeSet();
        hs.add(new PrinterName(printerName, null));
        PrintService[] pss = PrintServiceLookup.lookupPrintServices(null, hs);
        if (pss.length == 0) {
            throw new ServiceException(ErrorCodes.PRINTER_NOTHAVE);
        }
        //获取打印服务对象
        PrinterJob job = PrinterJob.getPrinterJob();
        //设置打印类
        job.setPageable(book);
        try {
            // 添加指定的打印机
            job.setPrintService(pss[0]);
            // 打印执行
            job.print();
        } catch (PrinterException e) {
            throw new ServiceException(ErrorCodes.PRINTER_ERROR);
        }
    }
}

2:配置小票格式以及数据

public class SalesTicket implements Printable {
    private List<Good
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值