Android笔记本怎么连接打印机机

有没有android使用WiFi连接打印机的demo,或者教程,谢谢
[问题点数:40分]
有没有android使用WiFi连接打印机的demo,或者教程,谢谢
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|Android蓝牙打印机,带你真正了解各种打印格式 - 简书
Android蓝牙打印机,带你真正了解各种打印格式
注意:本文原创,转载请注明出处。欢迎关注我的
本文主要讲解蓝牙打印机在打印小票的过程中,如何打印各种常见格式。由于之前需要调试打印格式,但是苦于网上没有详细的讲解教程,无奈只能自给自足,自己封装了一个。如果各位盆友正在或者曾经苦恼蓝牙打印机的打印格式,那么恭喜你,本篇博文就是你要寻找的。
什么是蓝牙打印机
是的,你没看错。一开始兔子哥先来介绍一下什么是蓝牙打印机。。。好吧,这个就交给百度了:
蓝牙打印机(Bluetooth printer)就是将蓝牙技术应用在打印机上,摆脱连线所带来的不便,实现无线打印,可以减少桌面上令人不快的电缆,并且可以将打印机远离主机任意搬动,摆放在房间中适合的位置。
常见小票样式
Paste_Image.png
这个小票格式基本就是最常见的了。这里面的各种格式,都可以从蓝牙打印机的API里面找到。蓝牙打印机有好多API,我把常用的给封装了一下:PrintUtils.java
* 复位打印机
public static final byte[] RESET = {0x1b, 0x40};
public static final byte[] ALIGN_LEFT = {0x1b, 0x61, 0x00};
* 中间对齐
public static final byte[] ALIGN_CENTER = {0x1b, 0x61, 0x01};
public static final byte[] ALIGN_RIGHT = {0x1b, 0x61, 0x02};
* 选择加粗模式
public static final byte[] BOLD = {0x1b, 0x45, 0x01};
* 取消加粗模式
public static final byte[] BOLD_CANCEL = {0x1b, 0x45, 0x00};
* 宽高加倍
public static final byte[] DOUBLE_HEIGHT_WIDTH = {0x1d, 0x21, 0x11};
public static final byte[] DOUBLE_WIDTH = {0x1d, 0x21, 0x10};
public static final byte[] DOUBLE_HEIGHT = {0x1d, 0x21, 0x01};
* 字体不放大
public static final byte[] NORMAL = {0x1d, 0x21, 0x00};
* 设置默认行间距
public static final byte[] LINE_SPACING_DEFAULT = {0x1b, 0x32};
打印小票,当然首先需要连接蓝牙打印机。至于如何扫描打印机,如何连接,这个都是标准的蓝牙方式,网上资料也很多。因为本博文主要关注打印格式,所以这个就不再赘述了。连接打印机后,需要从BluetoothSocket中获取OutputStream。然后接下来都是通过OutputStream来给打印机发送打印指令。
设置打印格式
设置打印格式,就要用到上面封装的那些指令了。
* 设置打印格式
* @param command 格式指令
public static void selectCommand(byte[] command) {
outputStream.write(command);
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
用法如下:
PrintUtils.selectCommand(PrintUtils.RESET);
PrintUtils.selectCommand(PrintUtils.LINE_SPACING_DEFAULT);
PrintUtils.selectCommand(PrintUtils.ALIGN_CENTER);
PrintUtils.selectCommand(PrintUtils.NORMAL);
* 打印文字
* @param text 要打印的文字
public static void printText(String text) {
byte[] data = text.getBytes("gbk");
outputStream.write(data, 0, data.length);
outputStream.flush();
} catch (IOException e) {
e.printStackTrace();
用法如下:
PrintUtils.printText("好吃的牛肉面" + "\n");
打印文字的时候,最后都要手动拼接一个 "\n" 用来换行。
根据上面封装的代码,“貌似”是可以实现所有的打印样式了。是的,没毛病。因为上面既有打印格式的设置,又有打印文字的用法。打印小票是没问题了。but……
这种格式如何实现?
Paste_Image.png
这种格式呢?
Paste_Image.png
有的盆友可能会说,这有啥问题的??? 并且给出了他们认为完美的解释:
PrintUtils.printText("合计
53.50" + "\n");
PrintUtils.printText("抹零
3.50" + "\n");
PrintUtils.printText("项目
金额" + "\n");
可是,完美吗?
你可能觉得人工加空格是可以“实现”需求。but……中间的空格,你知道应该添加多少吗?添加多了或者少了,打印出来的结果都会一塌糊涂!并且注意小票上都是要求对齐的!合计、抹零左侧对齐。金额右侧对齐。项目、数量、金额这三列都要中心对齐。。看到这里,这个人工加空格的做法,还完美吗?
给我一个完美的解释!
“海参炒面,海参呢?给我一个完美的解释!”
“我叫海参,面是我炒的。完美不?”
是的,我们需要一个完美的解释。到底如何实现上面说的打印两列、打印三列的情况。
首先,讲解之前,先设置几个默认值:
* 打印纸一行最大的字节
private static final int LINE_BYTE_SIZE = 32;
* 打印三列时,中间一列的中心线距离打印纸左侧的距离
private static final int LEFT_LENGTH = 16;
* 打印三列时,中间一列的中心线距离打印纸右侧的距离
private static final int RIGHT_LENGTH = 16;
* 打印三列时,第一列汉字最多显示几个文字
private static final int LEFT_TEXT_MAX_LENGTH = 5;
我们知道,通用的打印纸都是有固定宽度的。经过大量测试,得出打印纸一行的最大字节数是32个字节。那么根据上面的注释,我们可以得到以下结论:
LEFT_LENGTH + RIGHT_LENGTH = LINE_BYTE_SIZE
这是毋庸置疑的。左侧宽度 + 右侧宽度 必须要等于打印纸总宽度。
而且因为打印三列的时候,中间一列是要居中显示的,所以LEFT_LENGTH和RIGHT_LENGTH都必须是总宽度32的一半,也就是必须是16.
那么如何计算某个文字所占的字节数呢?
* 获取数据长度
* @param msg
@SuppressLint("NewApi")
private static int getBytesLength(String msg) {
return msg.getBytes(Charset.forName("GB2312")).
OK,准备了这么多,海参终于准备好了。接下来就可以准备炒面了~
* 打印两列
* @param leftText
* @param rightText 右侧文字
@SuppressLint("NewApi")
public static String printTwoData(String leftText, String rightText) {
StringBuilder sb = new StringBuilder();
int leftTextLength = getBytesLength(leftText);
int rightTextLength = getBytesLength(rightText);
sb.append(leftText);
// 计算两侧文字中间的空格
int marginBetweenMiddleAndRight = LINE_BYTE_SIZE - leftTextLength - rightTextL
for (int i = 0; i & marginBetweenMiddleAndR i++) {
sb.append(" ");
sb.append(rightText);
return sb.toString();
那位说话了:“你这代码明明也是手动拼的空格啊,完美个毛啊!”。大兄弟你消消气,这里是通过逻辑进行拼接的空格,不是无脑的拼接。打印两列的步骤如下:
拼接左侧一列的文字
拼接两侧文字中间的空格
拼接右侧一列的文字
关键步骤是计算两侧文字中间的空格。怎么计算呢?很简单,总宽度 - 左侧文字长度 - 右侧文字长度
就是空格的长度。
* 打印三列
* @param leftText
* @param middleText 中间文字
* @param rightText
@SuppressLint("NewApi")
public static String printThreeData(String leftText, String middleText, String rightText) {
StringBuilder sb = new StringBuilder();
// 左边最多显示 LEFT_TEXT_MAX_LENGTH 个汉字 + 两个点
if (leftText.length() & LEFT_TEXT_MAX_LENGTH) {
leftText = leftText.substring(0, LEFT_TEXT_MAX_LENGTH) + "..";
int leftTextLength = getBytesLength(leftText);
int middleTextLength = getBytesLength(middleText);
int rightTextLength = getBytesLength(rightText);
sb.append(leftText);
// 计算左侧文字和中间文字的空格长度
int marginBetweenLeftAndMiddle = LEFT_LENGTH - leftTextLength - middleTextLength / 2;
for (int i = 0; i & marginBetweenLeftAndM i++) {
sb.append(" ");
sb.append(middleText);
// 计算右侧文字和中间文字的空格长度
int marginBetweenMiddleAndRight = RIGHT_LENGTH - middleTextLength / 2 - rightTextL
for (int i = 0; i & marginBetweenMiddleAndR i++) {
sb.append(" ");
// 打印的时候发现,最右边的文字总是偏右一个字符,所以需要删除一个空格
sb.delete(sb.length() - 1, sb.length()).append(rightText);
return sb.toString();
打印三列的步骤如下:
拼接左侧一列的文字
拼接左侧文字和中间文字中间的空格
拼接中间的文字
拼接右侧文字和中间文字中间的空格
拼接右侧一列的文字
在计算空格的时候,为了保证中间一列始终保持中心线对齐,所以在计算中间文字长度时候,都除以2。
完整打印代码
PrintUtils.selectCommand(PrintUtils.RESET);
PrintUtils.selectCommand(PrintUtils.LINE_SPACING_DEFAULT);
PrintUtils.selectCommand(PrintUtils.ALIGN_CENTER);
PrintUtils.printText("美食餐厅\n\n");
PrintUtils.selectCommand(PrintUtils.DOUBLE_HEIGHT_WIDTH);
PrintUtils.printText("桌号:1号桌\n\n");
PrintUtils.selectCommand(PrintUtils.NORMAL);
PrintUtils.selectCommand(PrintUtils.ALIGN_LEFT);
PrintUtils.printText(PrintUtils.printTwoData("订单编号", "\n"));
PrintUtils.printText(PrintUtils.printTwoData("点菜时间", " 10:46\n"));
PrintUtils.printText(PrintUtils.printTwoData("上菜时间", " 11:46\n"));
PrintUtils.printText(PrintUtils.printTwoData("人数:2人", "收银员:张三\n"));
PrintUtils.printText("--------------------------------\n");
PrintUtils.selectCommand(PrintUtils.BOLD);
PrintUtils.printText(PrintUtils.printThreeData("项目", "数量", "金额\n"));
PrintUtils.printText("--------------------------------\n");
PrintUtils.selectCommand(PrintUtils.BOLD_CANCEL);
PrintUtils.printText(PrintUtils.printThreeData("面", "1", "0.00\n"));
PrintUtils.printText(PrintUtils.printThreeData("米饭", "1", "6.00\n"));
PrintUtils.printText(PrintUtils.printThreeData("铁板烧", "1", "26.00\n"));
PrintUtils.printText(PrintUtils.printThreeData("一个测试", "1", "226.00\n"));
PrintUtils.printText(PrintUtils.printThreeData("牛肉面啊啊", "1", "2226.00\n"));
PrintUtils.printText(PrintUtils.printThreeData("牛肉面啊啊啊牛肉面啊啊啊", "888", "98886.00\n"));
PrintUtils.printText("--------------------------------\n");
PrintUtils.printText(PrintUtils.printTwoData("合计", "53.50\n"));
PrintUtils.printText(PrintUtils.printTwoData("抹零", "3.50\n"));
PrintUtils.printText("--------------------------------\n");
PrintUtils.printText(PrintUtils.printTwoData("应收", "50.00\n"));
PrintUtils.printText("--------------------------------\n");
PrintUtils.selectCommand(PrintUtils.ALIGN_LEFT);
PrintUtils.printText("备注:不要辣、不要香菜");
PrintUtils.printText("\n\n\n\n\n");
Paste_Image.png
学习了上面的打印格式,那么这个小票怎么打印? 区别就是打印三列的时候,中间一列是偏右了。相信大家应该知道答案了。如果有疑问,可以给我留言。
鉴于好多读者给我留言,要PrintUtils工具类代码,所以我把代码发布到github上了,大家可以自行下载。地址是:
如果有帮助到你,可以顺手来个star 。万分感谢!
追求超越,成功会不期而至。享受过程,结果将水到渠成。
最近竞品公司出了一个接入蓝牙打印机的功能,作为竞争对手公司肯定不能少所以就给我分了任务,搞定蓝牙打印机 首先介绍一个公司的蓝牙打印功能设想,因为公司已经具备了wife打印机的打印功能而且非常完善,于是就在想是不是可以吧蓝牙当一个wife去使用这样工作量能少N倍啊,想到这里那...
Guide to BluetoothSecurity原文 本出版物可免费从以下网址获得:https://doi.org/10.6028/NIST.SP.800-121r2 权威 本出版物是由NIST根据2014年 “联邦信息安全现代化法案” (FISMA),44 USC §...
激光技术出现于60年代,真正投入实际应用始于70年代初期。最早的激光发射器是充有氦-氖(He-Ne)气体的电子激光管,体积很大,因此在实际应用中受到了很大限制。70年代末期,半导体技术趋向成熟。半导体激光器随之诞生,高灵敏度的感光材料也不断发现,加上激光控制技术的发展,激...
上一篇 主要介绍了如何通过蓝牙连接到打印机。这一篇,我们就介绍如何向打印机发送打印指令,来打印字符和图片。 ===================== 更新==================== 终于抽时间整了一个可以运行的demo出来,实现了以下功能...
公司的一个手机端的 CRM 项目最近要增加小票打印的功能,就是我们点外卖的时候经常会见到的那种小票。这里主要涉及到两大块的知识: 蓝牙连接及数据传输 ESC/POS 打印指令 蓝牙连接不用说了,太常见了,这篇主要介绍这部分的内容。但ESC/POS 打印指令是个什么鬼?简单说...
等,我一个人等在风里 许久
很多时候我选择沉默 当枫叶染红了你的街道 我的青丝发白
老成夜乌黑苍白的老树 你依旧要走 就这样 我 等了多少春秋 始终有些话,我无法向你谈起 就像你不曾和我说 我爱你 梦里,我一次次将爱怀揣
禅和花有着千丝万缕的关系,佛教讲人生是一场修行,书法、香道、花道都是一种法门,不同的法门应了你不同的机缘,帮助你通过它完成自我的修行,插花的过程是修心的过程,花道的精神就是‘天地人’的和谐统一,达到人花一体是一种境界,在插花中观照内心,让自己与自然和谐共处,平神静气,...
在武侠小说中,金庸的《书剑恩仇录》,无疑算得上一场现实的悲剧。 明明是作者的第一部武侠作品,他却不肯让笔下的那些儿女,真正拥有一段携书弹剑,快意恩仇的武侠人生,偏要他们在勾心斗角的权谋里泥足深陷,在庙堂与江湖的冲突中摸爬滚打,在国家与民族的重压下勉力难当——正如那刚出鞘的剑...
Author:ProZoom Hobby:爱折腾、爱思考,想静静的ProZoom Github
CSDN --- 关于我 Android Coding Style 1 Project structure 工程结构 1.1 Notice 说明 N...
今天和老公讨论个事情,最终恍然大悟。 我说:老公,你说你娶了个多聪明的媳妇呀? 老公:聪明! 我说:你知道为啥你能娶到这么好的媳妇吗? 老公:为啥? 我说:因为你特别好,你值得娶这么好的媳妇! 高兴的时候有能量,有能量就有创造力,很多没和老公休闲的聊天了。生活中的小插曲,暖...当前位置:
Android如何连接打印机
Android如何连接打印机
来源:网络整理&&&&&时间: 20:25:20&&&&&关键词:如何连接打印机,Android
关于网友提出的“Android如何连接打印机”问题疑问,本网通过在网上对“Android如何连接打印机”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:Android如何连接打印机
最近在做一个手机小程序,想通过该程序把图片从手机发送到蓝牙打印机并打出来,打印机可支持A4纸.
不知道哪位兄弟搞过类似的东西,请教一下,技术上是否可行?&若可行,如何调用打印机并打印?解决方案1:
只搞过串口打印机的
解决方案2:
还真没想到过。
解决方案3:
ARM架构的平板电脑目前都不能够使用打印机,只用使用Windows&XP或者Windows&7系统的x86架构的平板电脑才能够连接打印机进行打印。
以上介绍了“Android如何连接打印机”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/779230.html
上一篇: 下一篇:android手机通过蓝牙连接xt4131A打印机实现打印的视频教程-原创视频-搜狐视频
android手机通过蓝牙连接xt4131A打印机实现打印的视频教程
<span class="c-black" data-rss-fanscount=" 人订阅
视频介绍:
android手机通过蓝牙连接xt4131A打印机实现打印的视频教程 上海芝柯打印技术有限公司 android手机通过蓝牙连接XT4131A打印机 实现打印的视频教程
推荐出品人Android有没有通过wifi连接打印机的解决方案_百度知道
Android有没有通过wifi连接打印机的解决方案
我有更好的答案
这个要通过主机打印机启动共享然后在你的手机上运行输入主机的IP地址把主机的打印机,添加你的手机上就可以局域网打印了
还需要一个软件 追问不好意思
我没有说清楚
我试过一个软件
从电子市场下载的 SMABA 软件 装上后 能够通过WIFI
和台式机的IP地址连接到台式机上(已做共享打印机 笔记本通过台式机打印没问题)
而其能看到台式机上的HP1018的打印机
连接打印机报错 连接失效
回答你开启了无线局域网共享了吗?
VpnVip资讯教程,软件使用平台。
操作系统/系统故障
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 电脑怎么连接打印机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信