
1.本技术涉及打印机领域,尤其涉及一种用微软系统直接驱动的打印系统、装置及方法。
背景技术:2.打印机驱动是一款支持包括(95、98、2000、2003、xp、vista、win7、win10)等各操作系统的集成了市场上90%以上的打印机驱动;
3.尽管微软已经提供了通用打印机驱动程序,简化了打印机驱动程序(或控制软件)的开发,但是通用打印机驱动程序结构复杂,各部件之间存在隐性依赖关系,参考已公开专利cn215552024u,其功能繁冗也不够灵活,开发者无法在图形引擎中加入自己的分色、数字半调、色彩匹配等对提高打印输出质量至关重要的算法,因此开发人员迫切需要设计自己的打印机驱动程序,以便在整体上把握驱动程序,加入所需要的各种算法。
技术实现要素:4.本技术实施例提供一种用微软系统直接驱动的打印系统、装置及方法,在微软系统中(不使用原厂驱动)直接驱动打印机,实现简洁高效、针对性强的打印输出功能,摆脱对打印机品牌及其驱动程序的依赖。
5.一种用微软系统直接驱动的打印方法,其特征在于,包括以下步骤:
6.接口调用步骤,打印机驱动程序提供ddi规定的接口函数供gdi调用;
7.传递步骤,gdi的调用传递到gdi图形引擎,该引擎将绘制指令脱机处理为emf文件,或直接连接打印机驱动程序,将打印图像传递到假脱机系统,此时应用程序完成打印文档任务。
8.检查步骤,所述假脱机系统将页面布局信息和作业控制指令加入数据流,然后将数据流发送到打印处理器,打印处理器检查打印假脱机接收的文件的格式,将emf文件内容的每一页回放给gdi,gdi把gdi命令分解成ddi定义的绘制图元,并把绘制图元传送到打印机驱动程序;
9.数据传送步骤,打印机驱动程序将绘制图元绘制成打印机语言格式的原始数据,并将原始数据传送到所述假脱机系统;
10.指令发送步骤,所述假脱机系统通过语言监视器把数据发送到端口监视器,端口监视器用os文件系统api往将数据写入硬件端口,最后数据被发送到打印机,并发送打印指令。
11.优选地,所述打印机驱动程序包括打印机驱动程序渲染模组、打印机驱动程序模型配置模组、驱动程序存储模组和打印设备通信模组,所述印机驱动程序包括以下步骤:
12.页面描述步骤,所述打印机驱动程序渲染模组将打印作业呈现到打印设备的页面描述语言中,所述打印驱动程序模型配置模组使用xpsdrv render模块;
13.配置模组步骤,所述打印机驱动程序模型配置模组连接print config括号内容放
入说明书中、高级约束处理、printticket和printcapabilities支持的javascript文件、autoconfig和devmodemap;
14.指令捕获步骤,所述驱动程序存储模组通过清单文件捕获打印机的设置指令;
15.通信步骤,所述打印设备通信模组使用打印机的双向通信和web服务与打印设备通信。
16.优选地,还包括后台处理程序,所述后台处理程序设置于本地计算机或远程网络打印服务器上;所述双向通信包括以下步骤:
17.发送请求步骤,若向打印机发送单个请求,打印机驱动程序先编写请求,然后调用ibidispl::sendrecv方法。若要发送多个请求,驱动程序将编写请求列表,然后调用ibidispl::multisendrecv方法;
18.请求传送步骤,收到请求后,后台处理程序的客户端部分将所述请求传递给服务器端后台处理程序;
19.分析请求步骤,后台处理程序收到请求,并分析请求中的数据,填充bidi request container结构;
20.地址填充步骤,所述后台处理程序调用sendrecvbididata或sendrecvbididatafromport,当任一函数返回时,其ppresdata参数指向一个内存位置,该位置包含打印机响应的已填充的bidiresponse__container结构的地址;
21.数据转换步骤,后台处理程序将所述bidiresponse__container结构中的数据转换为适合应用程序或驱动程序使用的窗体,并将所述窗体传递回后台处理程序,最后传回请求方。
22.优选地,所述打印机驱动程序渲染模组打印筛选器管道配置文件对xpsdrvrendering过程进行管理和控制。
23.优选地,所述筛选器管道包括ihv呈现筛选器、ihv功能筛选器和标准xps筛选器;
24.所述ihv呈现筛选器完成从xps到设备pdl输出的渲染,在没有任何呈现筛选器的情况下,支持能够将xps作为pdl使用的设备;
25.所述ihv功能筛选器对打印文件进行预处理、水印或页面重新排序;
26.所述标准xps筛选器支持从xps到pcl6的内置转换。
27.优选的,所述端口监视器由用户模式的多个端口监视服务器组成,在用户模式的打印假脱机及访问i/o硬件端口的内核模式的端口驱动程序之间提供通讯,所述端口监示器也负责管理及配置一个服务器的打印机端口;
28.其中针对windows,每一个所述端口监视器被分为端口监视uidll和端口监视服务器dll;
29.所述端口监示服务器dll包含用户接口,并在打印客户系统上执行,所述端口监示服务器dll驻留在客户系统的system32子目录中,所述端口监视服务器dll包含端口通讯功能并在打印服务器上执行。
30.优选的,所述打印机通知由bidi和driverevent xml文件驱动,使用driverevent xml文件来描述bidi查询,然后引发驱动程序事件的触发器。
31.一种用微软系统直接驱动的打印系统,包括用户层组件、系统用户态组件、windows执行体和系统底层组件;
32.所述用户层组件调用标准库,所述标准库由开发语言提供,其根据平台的不同做适应性调整;
33.所述系统用户态组件的windows系统函数由相应的动态链接库提供,应用程序调用系统函数,系统函数会进一步调用由ntdll动态链接库提供的中介函数,从用户态进入内核态,并指定进入内核态所调用的同名函数的位置;
34.所述windows执行体包括x86、dec alpha、mips和powerpc指令集,所述windows执行体内部的中介函数通过系统调用指令进入内核后,执行体中的组件之一i/o管理器会根据请求生成i/o请求包,将其交付给驱动程序。
35.所述系统底层组件将由i/o管理器发来的请求发送给它所附载的下级的驱动程序,i/o请求流经整个驱动程序栈,并时刻向管理器反馈。
36.优选的,所述windows执行体和所述内核构成ntoskrnl.exe文件,所述ntoskrnl.exe文件操控请求包,当请求包最终传递到驱动栈底层的总线驱动后,由总线驱动调用相应的硬件抽象层函数并与硬件进行通信。
37.一种用微软系统直接驱动的打印装置,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时应用如下步骤:
38.接口调用步骤,打印机驱动程序提供ddi规定的接口函数供gdi调用;
39.传递步骤,gdi的调用传递到gdi图形引擎,该引擎将绘制指令脱机处理为emf文件,或直接连接打印机驱动程序,将打印图像传递到假脱机系统,此时应用程序完成打印文档任务。
40.检查步骤,所述假脱机系统将页面布局信息和作业控制指令加入数据流,然后将数据流发送到打印处理器,打印处理器检查打印假脱机接收的文件的格式,将emf文件内容的每一页回放给gdi,gdi把gdi命令分解成ddi定义的绘制图元,并把绘制图元传送到打印机驱动程序;
41.数据传送步骤,打印机驱动程序将绘制图元绘制成打印机语言格式的原始数据,并将原始数据传送到所述假脱机系统;
42.指令发送步骤,所述假脱机系统通过语言监视器把数据发送到端口监视器,端口监视器用os文件系统api往将数据写入硬件端口,最后数据被发送到打印机,并发送打印指令。
附图说明
43.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
44.图1为本技术实施例中的微软系统中直接驱动打印机方法示意图;
45.图2为本技术实施例中微软系统中直接驱动打印机方法aoi交互结构图;
46.图3为本技术实施例中系统整体架构图。
具体实施方式
47.本技术实施例中提供一种用微软系统直接驱动的打印系统、装置及方法,满足微
软系统中不使用原厂驱动直接驱动打印机,实现简洁高效、针对性强的打印输出功能,摆脱对打印机品牌及其驱动程序的依赖。
48.下面结合参照附图1-图3对本技术实施例提供的一种用微软系统直接驱动的打印系统、装置及方法作进一步说明。
49.参考图1-图3,为了不使用原厂驱动直接驱动打印机,打印机驱动程序提供ddi规定的一系列接口函数供gdi调用,同时在这些函数中实现打印机控制语言以驱动打印机工作。与其他显示设备驱动不同的是,打印机驱动程序并不直接操纵硬件,而是把数据流发给假脱机组件,假脱机组件再把数据发送到相应端口,最后发送到打印机设备。
50.打印机驱动程序在很大程度上依赖于数据文件和javascript来实现扩展性,其架构的核心分为四个部分:
51.1、打印机驱动程序渲染,即将打印作业呈现到打印设备的页面描述语言中,打印驱动程序模型使用xpsdrv render模块。
52.2、打印机驱动程序模型配置层,配置层支持四种类型的配置:print config(即gpd/ppd配置文件);支持高级约束处理以及printticket和printcapabilities支持的javascript文件,autoconfig(gdl配置文件)和devmodemap(xml配置文件)。
53.3、打印驱动程序模型使用新的安装模式,打印驱动程序直接从驱动程序存储(driver store)运行,这消除了文件冲突的可能性并提高安装性能。安装模型继续使用inf文件,但也采用新的清单文件来捕获打印机特定的设置指令。
54.4、打印机驱动程序连接模型允许使用设备(wsd)的双向和web服务与打印设备通信。
55.gdi的调用传递到gdi图形引擎,该引擎将绘制指令脱机处理为emf文件(增强型图元文件)或者直接连接到打印机驱动程序上,然后将打印图像传递到假脱机系统。此时应用程序完成了打印文档的任务,用户可以自由使用应用程序完成其他任务,而打印假脱机则保证文档被打印。打印假脱机将页面布局信息和作业控制指令加入数据流,然后将数据流发送到打印处理器,打印处理器检查打印假脱机文件的格式,对于emf文件,它将内容的每一页回放给gdi,gdi把gdi命令分解成ddi(图形设备接口)定义的绘制图元,并把绘制图元送到打印机驱动程序,打印机驱动程序将绘制图元绘制成打印机语言格式的原始数据,例如pcl等,接着原始数据被送到打印假脱机系统。接着打印假脱机将数据发送到语言监视器,语言监视器把数据发送到端口监视器,端口监视器用os文件系统api往硬件端口写数据,最后数据被发送到打印机。
56.为了驱动程序能够向打印机发送一个或多个请求,打印机也能响应这些请求,采用双向通信来实现驱动程序与打印机之间的通信,在实现双向通信接口:ibidispl com接口,以及ibidirequest和ibidirequestcontainercom接口,在打印提供程序dll中实现sendrecvbididata函数,在语言监视器服务器dll和端口监视器服务器dll中实现sendrecvbididatafromport函数,若向打印机发送单个请求,打印机驱动程序先编写请求,然后调用ibidispl::sendrecv方法,若要发送多个请求,驱动程序将编写请求列表,然后调用ibidispl::multisendrecv方法,收到请求后,后台处理程序的客户端部分(winspool.drv)将它传递给服务器端后台处理程序(spoolsv.exe),服务器端后台处理程序可以位于本地计算机或远程网络打印服务器上,服务器端后台处理程序收到请求,分析
请求中的数据,并填充bidi_request container_结构的成员,然后,服务器端后台处理程序调用sendrecvbididata或sendrecvbididatafromport,当任一函数返回时,其ppresdata参数指向一个内存位置,该位置包含包含打印机响应的已填充的bidi response__container结构的地址,服务器端后台处理程序将此结构中的数据转换为适合应用程序或驱动程序使用的窗体,并将其传递回客户端后台处理程序,最后传回请求的发起方。
57.打印筛选器管道配置文件(print filter pipeline configuration file)对xpsdrv rendering过程进行管理和控制。
58.其中ihv呈现筛选器:此筛选器完成从xps到设备pdl输出的渲染;在没有任何呈现筛选器的情况下,支持能够将xps作为pdl使用的设备;
59.其中ihv功能筛选器:ihv功能筛选器支持处理多个功能,例如,对多个功能进行预处理、水印或页面重新排序,采用windows提供了标准xps筛选器,用于支持从xps到pcl6的内置转换,打印驱动程序支持windows桌面ui和microsoft store ui中的自定义。
60.为了更好地管理电池使用时间并尽量减少中断,仅在用户打印时显示通知,打印机通知由bidi和driverevent xml文件驱动。
61.为了后台发送避免了长时间占用cpu,使控制权迅速返回给用户以便进行其它操作,打印假脱机与打印机驱动程序相连接,接收由gdi创建的数据流,并向特定类型的打印机输出,在逻辑打印机队列里选择第一个可用的物理打印机,将假脱机格式的数据流(例如emf)转换为可以被发送到打印机硬件的格式。
62.为了将打印作业直接送到本地或远程的打印设备,所有的打印提供者都提供一个普通的打印提供者能力集。这些能力由一套api函数定义,并被假脱机发送器(spoolss.dll)调用;许多由打印提供者定义的函数需要一个打印句柄作为输入,假脱机的客户端在winspool.drv中通过调用openprinter()获取一个打印机的句柄,该客户端调用api服务器(spoolsv.exe)。假脱机发送器(spoolss.dll)调用每一个打印提供者的openprinter()函数直至其中一个函数提供一个打印机的句柄并且返回一个值,即指明打印提供者识别出了专用的打印机名称。发送器此时则返回它的句柄到api服务器,发送器的句柄包括打印机的句柄以及打印提供者的句柄。该句柄返回到应用程序,这样应用程序后续的调用就可以直接送到正确的提供者和打印机。
63.打印提供者主要完成以下功能:
64.打印队列管理:增加、删除、打开、关闭、枚举及设置打印队列的参数,提供打印队列状态变化的通知。
65.打印机驱动程序管理:增加、删除、枚举及指定一个打印机驱动程序的目录。
66.打印作业创建:开始和结束一个文档,开始和结束一个文档页面,将作业的数据流写入一个端口,并读取打印机的状态信息。
67.打印作业安排:安排、枚举、并设置打印作业的参数。
68.表格管理:增加、删除、枚举并设置打印表格的参数。
69.打印处理器管理:增加、删除、枚举、指定目录及打印处理器支持的数据类型。
70.打印监视管理:增加、删除以及枚举打印监视器。
71.端口管理:增加、删除、配置、枚举并设置打印机端口的参数。
72.注册表管理:创建、删除并枚举与打印提供者相关的注册表键及值。
73.其他能力:显示消息框、关闭打印提供者、读一个内存映像的假脱机文件、提供与端口监视器用户接口dll与端口监视器服务器端dll的通信通道。这些能力都是按照打印提供者定义的一套函数来实现的。
74.为了转换打印作业的假脱数据到打印监示器的格式,打印作业的假脱机数据包含在一个假脱机文件中,打印处理器读取这些文件,在数据流上执行转换操作,并将转换的数据写到假脱机,假脱机然后发送数据流到合适的打印监示器。microsoft提供的缺省的打印处理器是winprint,它支持原始和增强型图元文件两种假脱机文件格式,如果打印机开发人员需要处理其他文件格式,就需要自己开发并使用打印处理器。
75.对于支持双向通讯的打印机,开发人员需要提供自己的语言监视器,而对于只有单向通讯(只支持主机向打印机单向信息传送)的打印机是可以不需要打印作业语言监视器的。语言监视器主要提供以下两个功能:
76.(1)在打印假脱机与双向打印机之间提供一个全双工的通信通道,从而具有提供软件可存取的状态信息的能力。
77.(2)增加打印机控制信息到数据流,如由打印机作业语言定义的命令等。语言监示器是可选的,并且只与特殊的包含在打印机的.inf中的打印机类型相关,如果一个语言监示器与打印机关联,语言监示器从打印处理器收到打印机的数据流,修改它并将之传递到打印机的端口监视器。
78.为了在用户模式的打印假脱机及访问i/o硬件端口的内核模式的端口驱动程序之间提供通讯,windows用户的“打印机”视图实际上是一个打印队列,是一个或多个物理打印机设备都可以连接到的队列。一个端口是一个在打印队列和一个单一打印机设备之间的物理连接。每一个端口监视器支持一个或多个的一种或多种端口类型的实例。例如,localmon.dll这一示例的端口监示器可以支持所有的服务器的本地com及ltp端口。对表示多个打印机设备(通过多个端口)的打印机队列来说,假脱机发送每个打印作业到第一个可用的端口。如果端口监示器指明一个可用端口忙或者遇到错误,假脱机将重新提交作业到队列,指定另外一个端口监示器支持的可用端口。除了localmon.dll,windows提供几个附加的端口监示器。windows服务器资源开发包中对每一个这样的端口监示器都做了描述。
79.尽管已描述了本技术的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改,所以,所附权利要求意欲解释为包括优选实施例以及落入本技术范围的所有变更和修改,
80.显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围,这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。