打印机简介:是计算机的输出设备之一,用于将计算机处理结果打印在相关介质上。

打印机类型:激光打印机、喷墨打印机、针式打印机、热敏打印机等。

计算机和打印机之间的连接方式:usb口、串口、并口、网口、蓝牙等。

由于工作中使用的是usb口的热敏打印机,所以就以此类型做介绍。(目前市场上常用的是usb口打印机)

热敏打印机工作原理:是打印头上安装有半导体加热元件,打印头加热并接触热敏打印纸后就可以打印出需要的图案,其原理与热敏式传真机类似。图象是通过加热,在热敏纸的膜中产生化学反应而生成的。这种热敏打印机化学反应是在一定的温度下进行的。高温会加速这种化学反应。当温度低于60℃时,纸需要经过相当长,甚至长达几年的时间才能变成深色;而当温度为200℃时,这种反映会在几微秒内完成。所以要想使热敏打印机打印出图形和文字,就必须满足两个条件,热敏纸和高温,是不需要墨的。

usb口热敏打印机打印分为两种:

1,指令打印(也叫直接打印),是直接将esc指令通过程序发送给打印机。当然这要看此款打印机是否支持esc指令,如何确定可以查看打印机的官网。作者测试时使用的一款icod(研科)的T58K,官方网址:http://www.szicod.com/products-show.asp?id=87     后文会介绍如何写c/c++程序来直接给打印机发送打印指令。

2,驱动打印,是在windows系统的帮助下,使用到gdi模块、驱动模块将要打印的内容进行图片话,以图片的格式打印。后文会详细介绍打印的临时文件SPL,并且可以从SPL文件中分析出EMF文件。EMF文件是一个图片格式的文件,可以直接在windows系统双击打开的。

下面详细介绍下指令打印和驱动打印:

指令打印:顾名思义,是直接将esc指令发送到打印机,打印机就能解析并进行相应的执行。那么我想先聊下,我们平常用记事本、word、pdf等软件打印时为什么不需要考虑这些,而是直接就能让打印机打印呢?原因是记事本、word、pdf这些软件已经实现了打印功能,他们具体是使用指令打印还是驱动打印我们是不清楚的,需要看他们的源代码才能确定。那么如果你不想通过这些软件来打印,那你就得自己去考虑使用哪种方式实现。后文会有我的一个MFC工程,包含了指令打印和驱动打印的简单例子。大家有兴趣可以看看。

驱动打印:驱动打印的过程比较复杂。会使用到windows系统的gdi模块、驱动模块。win32 api有相关的接口。主要使用CPrintDialog、StartDoc、StartPage、TextOut等接口实现。这些接口很明显是屏蔽了具体的打印机的,应用程序不需要关注打印机的实现细节,只要按照win32 api的打印接口调用即可实现打印。应用程序打印会产生一个打印作业,被放入打印后台处理程序(spoolsv.exe),并且在C:\Windows\System32\spool\PRINTERS\   目录下产生一个SPL临时文件。我们可以分析改SPL,并将其转换为EMF文件。然后EMF文件被驱动程序翻译成esc指令,最终将esc指令发往打印机实现打印。那既然两种打印方式最终到打印机那边都是esc指令,那为啥还要分指令打印和驱动打印呢?其实这两种打印方式是有区别的,指令打印时直接打印,比如你打印"123abc",那么最终的esc指令是使用字符串方式打印,所以截获数据就能截获到打印内容。而如果是驱动打印,是将原来的数据当成是图片来打印,比如同样你打印"123abc",那么最终的esc指令是使用图片方式打印,所以截获的数据是还原不了打印内容的。

针对EMF文件:理论上,我们可以将得到的EMF文件解析,并还原出原始的打印数据的。但是如果上层应用设置了ETO_GLYPH_INDEX选项,会使得分析出来的数据并不是字符编码,而是某字库的索引。这样的话要想通过EMF文件解析出原始打印数据也是非常困难的。

测试工程所在的百度网盘链接及提取码:

链接: https://pan.baidu.com/s/1EA8Os3W8l_vlC8AjLQRL9A 提取码: kjwm

csdn下载链接:

https://download.csdn.net/download/weixin_29071533/11286829

相关连接:

EMF解析相关:https://www.cnblogs.com/snaildev/p/7693189.html

https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-emf/91c257d7-c39d-4a36-9b1f-63e3f73d30ca

打印机数据截获相关:

https://www.cnblogs.com/MrDing/tag/

https://www.cnblogs.com/we-hjb/p/5596880.html

http://www.doc88.com/p-2062378632507.html

												

usb口打印机的指令打印和驱动打印的更多相关文章

  1. 树莓派3b无驱动打印

    Linux系统下很少有对打印机做驱动支持,自己做起来又有非常麻烦,还好大多数打印机都能够支持escpos协议,因此我们可以做到无驱动打印. 1.安装python-usb库 git clone http ...

  2. USB口,串口,以太网口简介

    USB口 一.什么是USB? USB是英文Universal Serial Bus的缩写,中文含义是"通用串行总线".它是一种应用在PC领域的新型接口技术.早在1995年,就已经有 ...

  3. Win7使用USB口连接H3C交换机的Console口

    使用Console线的一端连接交换机的Console口,另一端连接电脑的USB口. 使用驱动精灵安装USB转串口驱动,我电脑上面提示安装的是: Prolific PL2303 USB转串口驱动1.16 ...

  4. TMS320VC5509的USB口通信

    1. 硬件如下,直接连接5509A的USB口即可 2. 测试如下,选择完器件型号之后会多出一个cmd文件,需要删除 3. 运行程序,电脑会出现USB安装驱动的提示 不过安装驱动遇到问题,应该是我电脑是 ...

  5. LODOP纸张/打印机/份数/打印方向/双面打印 简短问答

    纸张#如何设置纸张纸张设置,参考样例5 http://www.c-lodop.com/demolist/PrintSample5.html纸张的一些优先级 http://www.c-lodop.com ...

  6. windows 系统再重启后,USB口失效(鼠标、U盘都无法识别)的过程及解决方法

    今天都差点忘记写随笔.今天在工作中,将电脑重启了一次,悲催了.重启完成后,鼠标无法使用了.最初认为 鼠标的问题,就一直"砸",但后来换了鼠标,仍然不能使用,开始认为没这边简单,拿出 ...

  7. usb口外接了Com设备,U盘识别不了问题

    就如本题,当我usb口外接了Com设备时候,再插入U盘会出现识别不了的问题. 解决方法非常的简单,只要拨出这个com设备的usb就可以使用U盘了^_^

  8. ROS知识(22)----USB口映射固定名字

    如果有多个usb链接到电脑,如果插入的先后顺序不同,那么会导致对应的usb口也会不同,例如当只有一个激光的usb链接到电脑,其设备名字为/dev/ttyUSB0:当如果有底盘的usb以及激光的usb连 ...

  9. macbook usb口突然不能用 解决方法

    1.先按shift+ctrl+opt+开机键,等待10秒,着10秒是没有反应的,屏幕不会亮,系统不会跑起来.2.10秒过后松开所以的键.3.再按opt+cmd+r+p接着按开机键,这时电脑会不断重启, ...

随机推荐

  1. cacti由snmp监控带宽

    1.安装和配置snmp a. yum install -y net-snmp net-snmp-utils b. chkconfig snmpd on c. chkconfig –list|grep ...

  2. 跟我学ASP.NET MVC之十:SportsStrore安全

    摘要: 在之前的文章中,我给SportsStore应用程序添加了产品管理功能,这样一旦我发布了网站,任何人都可能修改产品信息,而这是你必须考虑的.他们只需要知道你的网站有这个功能,以及功能的访问路径是 ...

  3. Linux 获得了其首款基于 RISC-V 的多核开源处理器

    去年,硅谷创业公司 SiFive 发布了首款开源 SoC(片上系统 System on a Chip),命名为 Freeform Everywhere 310.现在,该公司从嵌入式系统领先一步,发布了 ...

  4. c#-WPF string,color,brush之间的转换

    原文:c#-WPF string,color,brush之间的转换 String转换成Color string-"ffffff" Color color = (Color)Colo ...

  5. Matlab随笔之线性规划

    原文:Matlab随笔之线性规划   LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:min xs.t. ...

  6. Emgu-WPF 激光雷达研究-移动物体跟踪2

    原文:Emgu-WPF 激光雷达研究-移动物体跟踪2 初步实现了去燥跟踪,并用圆点标注障碍物 https://blog.csdn.net/u013224722/article/details/8078 ...

  7. 服务器做RAID10

    将接上Raid card的机器开机,根据提示按组合键进入Raid配置界面(一般是按Ctrl+H,具体的根据提示进行即可)   点击Configuration Wizard,选择new configur ...

  8. x:ArrayExtension

    <Window.Resources> <x:ArrayExtension x:Key="array" Type="{x:Type sys:Int32}& ...

  9. 原生Js监听普通dom尺寸变化

    原生Js监听普通dom尺寸变化 具体做法有以下几种: 初始化项目后,轮询,反复查看 dom 尺寸是否变化,这种一听就感觉不好,开销太大. 监听元素的滚动事件,在 目标 dom 里面包裹一个同等大小的 ...

  10. centos 6.5 搭建ftp 服务器(vsftpd的配置文件说明)

    0x00 如何快速的搭建简易的资源发布站 开启简易的python http服务器 1 2 cd /home/your_path python -m SimpleHTTPServer 8000 开启防火 ...