服务端将打印内容发送给客户端,APP进行打印(支持网络打印机和蓝牙打印机)

public class PrintTools {

    private static final String TAG = PrintTools.class.getSimpleName();

    /**
     * 根据后台拼接好的内容打印出来
     */
    public static void printByBTPrinter(String jsContent) {

        printByPrinter(jsContent, "");
    }


    public static void printByNetPrinter(String jsContent, String ip) {
        printByPrinter(jsContent, ip);
    }

    private static void printByPrinter(String jsContent, String ip) {
        boolean bluePrint = TextUtils.isEmpty(ip);
        EscCommand esc = new EscCommand();
        if (esc != null) {
            esc.addPrintAndFeedLines((byte) 8);
            esc.addCutPaper();
            List<PrintLineData> content = GsonUtils.gsonToList(jsContent, PrintLineData.class);
            if (TextUtils.isEmpty(jsContent)) {
                return;
            }
            for (PrintLineData line : content) {
                if (checkNonNull(line.getColumns())) {
                    if (line.getColumns().size() > 1) {//多列
                        for (PrintLineData.ColumnsBean column : line.getColumns()) {
                            //加粗
                            boolean isBold = column.getBold() == 1;
                            esc.addSelectPrintModes(EscCommand.FONT.FONTA, isBold ? EscCommand.ENABLE.ON : EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF);
                            //设置字体大小
                            setFontSize(esc, column.getFontSize());
                            esc.addSelectJustification(column.getTextAlignment());
                            esc.addText(column.getContent());
                        }
                        esc.addText("\n");
                    } else {
                        PrintLineData.ColumnsBean column = line.getColumns().get(0);
                        if ("barcode".equals(column.getContentType())) {//如果是条形码

                            if (!TextUtils.isEmpty(column.getContent())) {
                                //esc.addSelectJustification(EscCommand.JUSTIFICATION.CENTER);
                                esc.addSelectJustification(column.getTextAlignment());
                                // esc.addSelectPrintingPositionForHRICharacters(EscCommand.HRI_POSITION.BELOW);//设置条码可识别字符位置在条码下方
                                esc.addSetBarcodeHeight((byte) 120); //设置条码高度为120点
                                esc.addSetBarcodeWidth((byte) 2); // 设置条码单元宽度为1
                                esc.addCODE128(esc.genCode128(column.getContent().trim()));
                                esc.addPrintAndLineFeed();
                            }

                        } else {
                            //加粗
                            boolean isBold = column.getBold() == 1;
                            esc.addSelectPrintModes(EscCommand.FONT.FONTA, isBold ? EscCommand.ENABLE.ON : EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF);
                            setFontSize(esc, column.getFontSize());
                            esc.addSelectJustification(column.getTextAlignment());
                            esc.addText(column.getContent() + "\n");
                        }
                    }
                }
            }
            esc.addPrintAndFeedLines((byte) 1);
            esc.addCutPaper();

            Vector<Byte> datas = esc.getCommand();
            if (bluePrint) {
                // 发送数据
                if (PrinterManager.getInstance().getBleManager() != null) {
                    PrinterManager.getInstance().getBleManager().handlePrint(datas, "打印时间");
                }
            } else {
                if (PrinterManager.getInstance().getNetManager(ip) != null) {
                    ThreadPool.getInstantiation().addTask(() -> {
                        PrinterManager.getInstance().getNetManager(ip).handlePrint(datas, "打印时间");
                    });
                } else {
                    PrinterManager.getInstance().connectNet(ip, "网络打印机", datas, "打印时间");
                }
            }
        }
    }


    /**
     * 动态设置字体大小
     *
     * @param esc      Escommond
     * @param fontSize 字体大小(large,middle,以及正常字体)
     */
    private static void setFontSize(EscCommand esc, String fontSize) {
        switch (fontSize) {
            case "large":
                esc.addSelectPrintModes(EscCommand.FONT.FONTA, EscCommand.ENABLE.OFF, EscCommand.ENABLE.ON, EscCommand.ENABLE.ON, EscCommand.ENABLE.OFF);
                break;
            case "middle":
                esc.addSelectPrintModes(EscCommand.FONT.FONTA, EscCommand.ENABLE.OFF, EscCommand.ENABLE.ON, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF);
                break;
            default:
                esc.addSelectPrintModes(EscCommand.FONT.FONTA, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF);
                break;
        }
    }


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件介绍: 不需要设置共享打印机,就可以在局域网、远程打印到指定要共印的打印机上局域网内使用。现在开始演示使用方法:1、启动和配置服务器!2、端口自定义为佳,以保网络安全!3、服务器单一共享打印设置完成,若有多台打印机要共享,则添加多个服务器,但每个服务器的端口要不一样。4、测试启动客户端5、服务器这框里头,最初是没有东西的。需要定义服务器信息,格式是:服务器名称(自定义),IP地址,端口。6、用户名是与服务器用户列中一样的用户信息7、如果连接成功,左边将显示所连到此服务的服务器名称和共享的打印机名称。8、工具框中有几个自动的按钮,按下了表示此功能启用,再点一下切换不启用.9、此时客户端的状态已就绪。可以支持远程打印了。下面演示两种打印方法1)、捕获打印到文件时的状态生成打印记录。由于我这里没有连接真正的打印机,则报错要你干预。真正的打印机就直接输出纸质材料了。2)、手动添加文件。此办法主要用于已经接收到别人的PRN、PRT、XPS文件所进行的操作。这里需要注意,自己选择的是非XPS文件,全部用PRN类型打印,只有XPS文件才用XPS类型打印。需要提醒的是,别人的或者自己原有的PRN文件,是要与之前输出的打印机一样的,打印结果才正常,不然会出现乱码现像。但XPS则不用之前输出的打印打印。所以。在生成文件时XPS是通用的,PRNPRT文件是与打印机一对一的才能打印的。特此说明。3)、想再次打印,则 要点[重新打印]工具按钮。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值