热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

(四)揭开打印机驱动的神秘面纱

上一篇我们得到了通过打印驱动生成的十六进制文件TestDriver如图4.1,接下来我就来过跟各位看官具体分析一下这些十六进制数的含义。要了解这些十六进制数据,有一个东东是必备的,就是ESCPOS指

上一篇我们得到了通过打印驱动生成的十六进制文件TestDriver如图4.1,接下来我就来过跟各位看官具体分析一下这些十六进制数的含义。要了解这些十六进制数据,有一个东东是必备的,就是ESC/POS指令集,网上有下载的。现在国内绝大部分的热敏打印都是用的ESC/POS指令,我们前面装的驱动就是按照ESC/POS指令做的,用的打也是按照ESC/POS指令做的。打印机要和计算机要能进行对话,就得使用共同的语言,这种语言就是ESC/POS。驱动就是将计算机要表达的内容,“翻译”成ESC/POS指令,再告诉打印机,打印机就开始打印了。

图4.1

     我们可以看到,第一行的数据1B40,这个是十六进制数,也就是0x1B,0x40,我们再打开ESC/POS指令集,查找到1B40这条指令如图4.2,                                                                                  图4.2

可以看到这条指令十六进为制1B 40,十进制为 27 64,十六进制的0x1B也就是十进制的27,十六进制的40也就是十进制的64.这条指令作用为初始化打印机。指令下面描述了指令的具体解释,主要是清除打印缓冲区数据和NV位图数据。

      再看下一条,1B4A30,打开ESC/POS指令集,如图4.3

如图4.3

可以看到这条命令的作用是打印并走纸,这条命令还带有一个参数n,现在命令为1B4A30,n就为十六进制0x30也就是十进制48,所以按照指令描述,走纸的距离为 n x 纵向或横向移动单位,这个纵向或横向移动单位,是可以设置的,一般打印机默认为1个点也就是0.125mm,所以走纸距离为48 x 0.125mm = 6mm。

     接下来一条为1D76300030018....这条指令比较复杂,查看指令如图4.4

    可以看到这条指令是用来打印光栅位图的,参数比较多,我们一一来对应,对照我们的数据1D763000300018...后,得到m=00,xL=0x30,xH=0x00,yL=0x18,yH=0x00,k=1152,这个指令就是驱动翻译的主要部分,是将图像和文字按照这个指令规定的方式,转换为点阵,传给打印机,打印机接收到这些点阵后,将图形和文字打印出来。

    从上面的分析可以看出驱动其实没干什么神奇的事,只是将要打印的内容,转换为数据点阵,再发给打印机,再打印出来,这些数据点阵的格式都是按照ESC/POS指令,所以说打印机开发中最重要的就是了解ESC/POS指令集,后面我会逐步介绍ESC/POS指令。


推荐阅读
  • 如何将人人影视下载的字幕添加到视频中
    许多用户在下载了人人影视提供的字幕后,不清楚如何将其与视频文件结合。本文将详细介绍如何正确地将字幕加载到视频中,确保观看体验更加完整。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文介绍了如何使用 Spring Boot DevTools 实现应用程序在开发过程中自动重启。这一特性显著提高了开发效率,特别是在集成开发环境(IDE)中工作时,能够提供快速的反馈循环。默认情况下,DevTools 会监控类路径上的文件变化,并根据需要触发应用重启。 ... [详细]
  • 三星W799在2011年的表现堪称经典,以其独特的双屏设计和强大的功能引领了双模手机的潮流。本文详细介绍其配置、功能及锁屏设置。 ... [详细]
  • 在API测试中,我们常常需要通过大量不同的数据集(包括正常和异常情况)来验证同一个接口。如果为每种场景单独编写测试用例,不仅繁琐而且效率低下。采用数据驱动的方式可以有效简化这一过程。本文将详细介绍如何利用CSV文件进行数据驱动的API测试。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了在使用Visual Studio 2015进行项目开发时,遇到类向导弹出“异常来自 HRESULT:0x8CE0000B”错误的解决方案。通过具体步骤和实践经验,帮助开发者快速排查并解决问题。 ... [详细]
author-avatar
24吴梦琦_581
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有