精华内容
下载资源
问答
  • Printer标准ES-POS命令打印固定IP或蓝牙打印,支持黑白图片打印预览 项目Github Bintray要求 minSdkVersion 5 <uses-permission android:name="android.permission.BLUETOOTH"

    Printer

    ICON

    标准ES-POS命令打印,固定IP或蓝牙打印,支持黑白图片打印

    预览

    Screenshots
    打印样例

    项目

    Github
    Bintray

    要求

    • minSdkVersion 5
    • <uses-permission android:name="android.permission.INTERNET" />
    • <uses-permission android:name="android.permission.BLUETOOTH" />

    引用

    dependencies {
        ⋯
        compile 'am.util:printer:2.0.0'
        ⋯
    }

    详情

    • 实现PrintDataMaker接口来实现打印任务
    • 继承PrinterWriter来实现更多纸张类型的打印
    • PrinterUtils包含了众多打印指令

    使用

    1.添加蓝牙权限<uses-permission android:name="android.permission.BLUETOOTH" />或者网络请求权限<uses-permission android:name="android.permission.INTERNET" />

    2.实现PrintDataMaker接口,完成具体打印任务:

    public class TestPrintDataMaker implements PrintDataMaker {
    
        private Context context;
        private String qr;
        private int width;
        private int height;
    
        public TestPrintDataMaker(Context context, String qr, int width, int height) {
            this.context = context;
            this.qr = qr;
            this.width = width;
            this.height = height;
        }
    
        @Override
        public List<byte[]> getPrintData(int type) {
            ArrayList<byte[]> data = new ArrayList<>();
            try {
                PrinterWriter printer;
                printer = type == PrinterWriter58mm.TYPE_58 ? new PrinterWriter58mm(height, width) : new PrinterWriter80mm(height, width);
                printer.setAlignCenter();
                data.add(printer.getDataAndReset());
    
                ArrayList<byte[]> image1 = printer.getImageByte(context.getResources(), R.drawable.ic_printer_logo);
                data.addAll(image1);
    
                printer.setAlignLeft();
                printer.printLine();
                printer.printLineFeed();
    
                printer.printLineFeed();
                printer.setAlignCenter();
                printer.setEmphasizedOn();
                printer.setFontSize(1);
                printer.print("我的餐厅");
                printer.printLineFeed();
                printer.setFontSize(0);
                printer.setEmphasizedOff();
                printer.printLineFeed();
    
                printer.print("最时尚的明星餐厅");
                printer.printLineFeed();
                printer.print("客服电话:400-8008800");
                printer.printLineFeed();
    
                printer.setAlignLeft();
                printer.printLineFeed();
    
                printer.print("订单号:88888888888888888");
                printer.printLineFeed();
    
                printer.print("预计送达:" +
                        new SimpleDateFormat("yyyy/MM/dd HH:mm", Locale.getDefault())
                                .format(new Date(System.currentTimeMillis())));
                printer.printLineFeed();
    
                printer.setEmphasizedOn();
                printer.print("#8(已付款)");
                printer.printLineFeed();
                printer.print("××区××路×××大厦××楼×××室");
                printer.printLineFeed();
                printer.setEmphasizedOff();
                printer.print("13843211234");
                printer.print("(张某某)");
                printer.printLineFeed();
                printer.print("备注:多加点辣椒,多加点香菜,多加点酸萝卜,多送点一次性手套");
                printer.printLineFeed();
    
                printer.printLine();
                printer.printLineFeed();
    
                printer.printInOneLine("星级美食(豪华套餐)×1", "¥88.88", 0);
                printer.printLineFeed();
                printer.printInOneLine("星级美食(限量套餐)×1", "¥888.88", 0);
                printer.printLineFeed();
                printer.printInOneLine("餐具×1", "¥0.00", 0);
                printer.printLineFeed();
                printer.printInOneLine("配送费", "免费", 0);
                printer.printLineFeed();
    
                printer.printLine();
                printer.printLineFeed();
    
                printer.setAlignRight();
                printer.print("合计:977.76");
                printer.printLineFeed();
                printer.printLineFeed();
    
                printer.setAlignCenter();
    
                data.add(printer.getDataAndReset());
    
                String bitmapPath = FileUtils.getExternalFilesDir(context, "Temp") + "tmp_qr.jpg";
                if (QRCodeUtil.createQRImage(qr, 380, 380, null, bitmapPath)) {
                    ArrayList<byte[]> image2 = printer.getImageByte(bitmapPath);
                    data.addAll(image2);
                } else {
                    ArrayList<byte[]> image2 = printer
                            .getImageByte(context.getResources(), R.drawable.ic_printer_qr);
                    data.addAll(image2);
                }
    
                printer.printLineFeed();
                printer.print("扫一扫,查看详情");
                printer.printLineFeed();
                printer.printLineFeed();
                printer.printLineFeed();
                printer.printLineFeed();
                printer.printLineFeed();
    
                printer.feedPaperCutPartial();
    
                data.add(printer.getDataAndClose());
                return data;
            } catch (Exception e) {
                return new ArrayList<>();
            }
        }
    }

    3.创建打印执行者:

    PrintExecutor executor = new PrintExecutor(String ip, int port, int type);
    PrintExecutor executor = new PrintExecutor(BluetoothDevice device, int type);

    4.设置执行者状态监听:

    executor.setOnStateChangedListener(new PrintSocketHolder.OnStateChangedListener() {
        @Override
        public void onStateChanged(int state) {
            switch (state) {
                case PrintSocketHolder.STATE_0:
                    //生成打印页面数据...
                    break;
                case PrintSocketHolder.STATE_1:
                    //生成数据成功,开始创建Socket连接...
                    break;
                case PrintSocketHolder.STATE_2:
                    //创建Socket成功,开始获取输出流...
                    break;
                case PrintSocketHolder.STATE_3:
                    //获取输出流成功,开始写入打印页面数据...
                    break;
                case PrintSocketHolder.STATE_4:
                    //写入打印页面数据成功,正在完成打印...
                    break;
            }
        }
    });

    4.设置执行者回调监听:

    executor.setOnPrintResultListener(new PrintExecutor.OnPrintResultListener() {
        @Override
        public void onResult(int errorCode) {
            switch (errorCode) {
                case PrintSocketHolder.ERROR_0:
                    //打印成功完成!
                    break;
                case PrintSocketHolder.ERROR_1:
                    //生成打印页面数据失败!
                    break;
                case PrintSocketHolder.ERROR_2:
                    //创建Socket失败!
                    break;
                case PrintSocketHolder.ERROR_3:
                    //获取输出流失败!
                    break;
                case PrintSocketHolder.ERROR_4:
                    //写入打印页面数据失败!
                    break;
                case PrintSocketHolder.ERROR_5:
                    //必要的参数不能为空!
                    break;
                case PrintSocketHolder.ERROR_6:
                    //关闭Socket出错
                    break;
                case PrintSocketHolder.ERROR_100:
                    //打印失败
                    break;
            }
        }
    });

    5.执行打印:

    int result = executor.doPrinterRequest(PrintDataMaker maker);//同步
    executor.doPrinterRequestAsync(PrintDataMaker maker);//异步

    如果你要实现自己的打印机PrinterWriter,那么你需要继承

    public class PrinterWriter80mm extends PrinterWriter {
    
        public static final int TYPE_80 = 80;// 纸宽80mm
        public int width = 500;
    
        public PrinterWriter80mm() throws IOException {
        }
    
        public PrinterWriter80mm(int parting) throws IOException {
            super(parting);
        }
    
        public PrinterWriter80mm(int parting, int width) throws IOException {
            super(parting);
            this.width = width;
        }
    
        @Override
        protected int getLineWidth() {
            //一行能够放下多少个“-”
            return 24;
        }
    
        @Override
        protected int getLineStringWidth(int textSize) {
            //根据字体的大小,一行可以放下多少个英文字符
            switch (textSize) {
                default:
                case 0:
                    return 47;
                case 1:
                    return 23;
            }
        }
    
        @Override
        protected int getDrawableMaxWidth() {
            //图片能够全部打印在纸上的最大宽度
            return width;
        }
    }

    注意

    • 打印图片出现乱码或者打印不出,大部分原因是打印机缓存较小导致,可调小PrinterWriter80mm的parting参数,设置其图片高度分割值(0~255),调小了还不行的话,缩小图片尺寸或者调整输出流的写入方式。
    • 仅提供建立蓝牙连接打印,不包括蓝牙搜索及配对功能
    • 不包含二维码生成功能

    历史

    展开全文
  • C语言实现控制行数打印星号金字塔

    千次阅读 2016-09-21 23:10:37
    #include <stdio.h> #include <windows.h> int main() { int i, j, k,n; printf("输入要打印的行数:"); scanf_s("%d", &n); for (i = 0; i < n; i++) //...
    #include <stdio.h>
    #include <windows.h>
    
    
    
    
        int main()
        {
            int i, j, k,n;
            printf("输入要打印的行数:");
            scanf_s("%d", &n);
    
    
            for (i = 0; i < n; i++) //控制行数的第一层循环
            {
                for (j = 0; j <= n- i; j++) //控制添加空格
                    printf("  ");
                for (k = 0; k<2 * i + 1; k++)//控制输出*
                    printf("* ");
                printf("\n");
            }
            system("pause");
            return 0;
        }
    
    
    

     

    展开全文
  • **题目:**读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。 for i in range(3): print('*'*int(input('input a number: '))) ????小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶 ???...
    **题目:**读取7个数(150)的整数值,每读取一个值,程序打印出该值个数的*。
    
    for i in range(3):
        print('*'*int(input('input a number: ')))
    
    

    📣小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶
    📣有什么不明白的欢迎私信或留言,得到细致讲解。另外想要进阶的朋友可以关注练手项目专栏

    📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们
    在这里插入图片描述

    展开全文
  • 方法一:将菱形的打印分解为打印每一行,再分解为打印两个的行和一个的行,在分解为打印空格和打印即可。 方法二:利用的对称性,如果只有一个*号则记两次,则每行星号之和是一个固定的值。 方法一代码 public class...

    思路

    方法一:将菱形的打印分解为打印每一行,再分解为打印两个的行和一个的行,在分解为打印空格和打印即可。
    方法二:利用
    的对称性,如果只有一个*号则记两次,则每行星号之和是一个固定的值。

    方法一代码

    public class Test02 {
        public static void main(String[] args) {
            for(int i = 0; i < 3; i++)
                System.out.print(" ");
            System.out.println("*");
            for(int i = 3; i > 0; i--) {
                for (int j = 1; j < i; j++)
                    System.out.print(" ");
                System.out.print("*");
                for(int k = (4-i)*2-1; k > 0; k--)
                    System.out.print(" ");
                System.out.println("*");
    
            }
            for(int i = 1; i < 3; i++) {
                for(int j = 0; j < i; j++)
                    System.out.print(" ");
                System.out.print("*");
                for(int k = (3-i)*2-1; k > 0; k--)
                    System.out.print(" ");
                System.out.println("*");
            }
            for(int i = 0; i < 3; i++)
                System.out.print(" ");
            System.out.println("*");
        }
    }
    
    

    方法二代码

    在这里插入图片描述

    运行结果

       *
      * *
     *   *
    *     *
     *   *
      * *
       *
    

    总结

    第二种方法可以作为一个案例

    展开全文
  • }else if(j){ //只打印星(*)前面的空格,不打印星(*)后面的 System.out.print(" "); } }else if(i==2 || i==6){ if(j>=3 && j){ System.out.print("*"); }else if(j){ System.out.print(" "); } }else if(i==3 || i=...
  • 6、编辑调试运行XT.java,在一个程序中输出ppt62页上的21层塔。熟悉理解java程序的编辑编译运行,熟悉java程序关键字的书写,main主函数的固定格式书写。...* 打印星塔: * 号与换行的巧妙结合。 / static void ...
  • 用数据分析的手段,看2019年CSDN博客之总评选

    万次阅读 多人点赞 2020-01-15 15:41:35
    万众瞩目的CSDN博客之总评选投票活动渐入佳境,竞争趋于白热化。入选前200名的博主们火力全开,使出了浑身解数,通过各种渠道拉票。一时间,CSDN刷爆了各大自媒体。无论是吃瓜群众,还是摇旗呐喊、擂鼓助威的亲友...
  • python 实现A算法

    千次阅读 多人点赞 2019-12-23 19:09:34
    python A算法效果图 效果图 (程序在cmd中打印所有有点闪屏!!!)
  • WPF的打印功能是很强大而简便的,它甚至能够直接打印界面上的内容,包括各种控件的显示内容,例如你在界面上摆放了一个datagrid控件,画了一个五角,或写了一段文字,都可以直接打印出来,这里有一篇文章...
  • C++编程 打印三角形的各种玩法

    万次阅读 多人点赞 2019-09-02 23:31:05
    目录1. 指定五行直角三角形2. 由用户指定任意行的等腰三角形3.平行四边形式等腰三角形拆分4....  定义两个变量i和j,通过i来控制外层循环用于控制三角形的行数,通过j来控制内层循环完成每行固定星号的输出。 ...
  • pyton打印菱形

    2018-08-05 20:50:38
    我们在做菱形时,一开始感觉不知道怎么做,其实我们可以将菱形分为两个部分,分为上下两个部分,可以看做两个三角形,一个在上,一个在下,我们分别打印出上下两部分,在分别打印出空格和号,若我们打印7行的,其...
  • 2007百度之

    2013-11-23 14:22:16
    2007年百度之程序设计大赛试题初赛题目 百度的高级搜索方法 (2007 年初赛)   题面描述: 你尝试过在百度上使用 site inurl 语法查询吗 ? 如果还没有的话可以试一下 :) 如输入 site:...
  • 打印如下图形 实现代码 package bilibilitext; public class TU1 { public static void main(String[] args) { //行数j从1开始进行循环,因为每行的元素都和行数相关,所以将行数定义为外循环 for(int j = 1;...
  • 课表之 绿色

    2007-07-28 22:26:00
    课表之 软件大小:9970 KB软件语言:简体中文软件类别:国产软件 / 共享版 / 教育管理应用平台:Win9x/NT/2000/XP/2003界面预览:无插件情况: 投诉更新时间:2006-05-29 13:27:25下载次数:3615推荐...
  • mar行边距,xaxt/yaxt坐标轴的样式,默认值为s表示以标准样式显示 打印657种颜色 固定颜色选择函数 通过palette函数固定调色板,只要设定好了调色板,它的取值就不会再改变(直到下一次重新设定调色板)。...
  • c++打印实心菱形

    万次阅读 2018-08-14 21:25:46
    打印 n 阶实心菱形 输入描述 输入一个整数n,0 &lt; n &lt;= 10 输出描述 输出 n 阶实心菱形 , 占 2*n-1 行 样例输入 3 样例输出 * *** ***** *** * #include "stdafx.h"...
  • ##需要输出四行*,有固定的循环次数我选择用for循环 #所有我设初始条件为i=1 #循环的结束条件 ##因为要输出四行,所以我设结束条件是i>5 #重复需要干什么 ##打印* #如何过渡到下一次循环 ##i+=1 n = 4 for i ...
  • 打印三角形

    2019-10-18 21:57:47
    中间打印星号 末尾打印换行(最后一行除外) 难点是pointer的思考,建议基1,便于理解 2.4 完整代码 public class Main { public static void main ( String [ ] args ) { int ...
  • 不是java很难,这明明就是数学计算题前言一、打印平行四边形二、打印正三角形三、打印...号是固定的 考虑如何使空格变化减少 代码如下(示例): for (int i = 0; i < 10; i++) { //控制每一行输出多少空格 for
  • 1.启动GPS AT+CGPSPORT=3 //配置GPS信息串口输出 OK AT+CGPS=1 //记载6658服务启动GPS OK AT+AGNSS //如果使用省流量的AGNSS,AT+AGNSS=1 ...//第二位是log配置,调试需要打印log则配置为1,默认0
  • 题目名称:列变位法解密  ... Problem Description ...列变位法是古典密码算法中变位加密的一种方法,具体过程如下 将明文字符分割成个数固定的分组(如5个一组,5即为密钥),按一组一行的次序整齐排列,最后
  • 要在c控制台中输入一个字符显示一个号, 则不能用"stdio.h'提供的库函数,因为它们都是带回显的,比如getchar() getchar()用来接收输入的字符串,输入一个字符就回显一个,直到遇到回车键或空格才停止接收输入...
  • 我们都知道,打印输出的时候,都是从最左端输出,而这里,第一个号是在中间。这实际是因为号之前有很多空格。当我们使用问号来表示空格,实际的输出效果应该是图1.2的形式。 图1.1 金字塔 图1.2 金字塔的分析...
  • 自动/固定/号宽度, 列跨度和行跨度, 标头会在出现分页符时自动重复, 图像和矢量图形, 方便的样式和样式继承, 页眉和页脚: 静态或动态内容, 访问当前页码和页数, 背景层 页面尺寸和方向, 边距 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,776
精华内容 3,910
关键字:

怎么打印固定的行