wince下在线打印机的支持


搞了三周的wince7下在线打印的功能,终于差不多了,剩下的交由软件来做。下面整理下自己的理解。(很多内容只是针对需要用到的做了基本的了解,横向理解可能会比较片面甚至错误,纵向理解可能不够深入,不过,这些足够满足wince下对打印机的支持了)。

1、打印机打印的大致的工作原理是什么?

先了解下打印机的大致的工作原理,有利于理解你到底在做什么,然后再看源码,会更容易理解一下,要不然看的是一头雾水。

打印机都有自己的打印语言,就像Windows操作系统下不能直接运行Android的app一样。打印机语言最常见的有PCL和PS(PostScript),还有基于主机等其他的, 有些打印机只支持某一类打印语言,有些高级一些的打印机可以同时支持多种语言(直接支持,或者需要插入相关语言解析模块)。PCL语言是HP定义的,HP的打印机一般都支持,不过这里需要注意的是,PCL语言有很多版本,目前常见的有PCL5c和PCL6,还有延伸的PCLGUI。不过PCLGUI和PCL不兼容。这点要特别注意!!!

打印工作基本流程:设备(或PC)将要打印内容通过驱动分解等,编码为打印机支持的打印语言,封装为连接接口需要的数据流,通过数据线传给打印机,打印机将 数据流解析,通过解码,执行指令开始打印。

2、wince下怎样才能支持在线打印功能?

这个在网上有很多介绍,主要是添加两个组件即可(也可以直接添加环境变量sysgen_pcl,sysgen_usb_printer),支持USB打印机和PCL语言。组件添加参考这里

3、wince下打印机相关的代码结构及源码简单分析。

源码主要分为两部分,第一部分是组件sysgen_usb_printer相关的,源码地址为:C:\WINCE700\public\common\oak\drivers\usb\class\printer,主要是USB打印机接 口相关的,和普通的流接口一致,接口为(LPT1:);最终会将编码的PCL指令通过这个接口传递给打印机。第二部分是sysgen_pcl相关的,源码地址 为:C:\WINCE700\public\common\oak\drivers\printer,也就是PCL指令编码部分;这个肯定不会像PC端那么强大,将打印机支持的所有功能都支持进去,一些基本的指 令操作打印还是没有问题的。如果想详细了解,可以自己去阅读,甚至可以根据PCL指令语法来研究PCL驱动。对我来说没有必要,所以没有研究。

4、wince下到底支持什么样的打印机?

既然驱动添加了,是不是整一台HP的打印机就可以直接打印了?答案当然是否定的,打印机应是USB接口的支持PCL语言的打印机(注意,wince下支持的是PCL语 言,PCLGUI语言的打印机是不兼容的!!!)。由于资源限制,我这里只是测试了型号为HP LaserJet Pro M202n的打印机,手册上说是支持PCL5c,PCL6(问做过打 印机的网友,说PCL5c,PCL6和系统支持的PCL是兼容的,PCLGUI是延伸的,类似但是不兼容)。

那么问题来了,wince下真的只能使用PCL语言的打印机,不能使用PCLGUI甚至其他语言的打印机了吗?答案是否定的,只要你有打印机语言在wince下的库,在打印 机注册表下指定库文件连接,也是可以打印的。我这里从网上下载了一个网友的PCLGUI的测试版本的库(测试版本打印出来后中间有一条粗的竖线。后来找到发布人,正 式版本需要收费),使用HP1112打印机(PCLGUI语言)测试可以正常打印。感兴趣的朋友可以到这里下载测试程序,里面包含测试库文件。

5、应用程序怎么调用?

应用程序主要使用HDC画图相关API来实现,打开接口如下:

printer.m_hDC = CreateDC(TEXT("PCL.dll"), TEXT("PCLGUI Inkjet"), TEXT("LPT1:"), &m_dm);

可以参考如下代码:(上面链接PCLGUI测试库,有测试例子,修改下库文件名称即可)

6、其他。

怎么知道设备发现打印机了?

答:如果没有安装相关驱动,则打印机连接后,会弹出对话框,让输入驱动名称;如果已经安装驱动,则在注册表下(HKEY_LOCAL_MACHINE\Printers\)会发现添加了新连接的打印机,且在注册表(HKEY_LOCAL_MACHINE\Printers\Ports)下会新增了新的端口(默认是LPT1:);

你可能感兴趣的:(wince7)