(计算机系统结构专业论文)windows+xp下打印机驱动程序的分析与设计.pdf_第1页
(计算机系统结构专业论文)windows+xp下打印机驱动程序的分析与设计.pdf_第2页
(计算机系统结构专业论文)windows+xp下打印机驱动程序的分析与设计.pdf_第3页
(计算机系统结构专业论文)windows+xp下打印机驱动程序的分析与设计.pdf_第4页
(计算机系统结构专业论文)windows+xp下打印机驱动程序的分析与设计.pdf_第5页
已阅读5页,还剩56页未读, 继续免费阅读

(计算机系统结构专业论文)windows+xp下打印机驱动程序的分析与设计.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 打印机是最重要的输出设备之一,而打印机驱动程序是打印机正常工作必不 可少的一部分,要设计具有自主知识产权的打印机,必须掌握主流操作系统下打 印机驱动程序开发技术。本文分析和设计w i n d o w sx p 下的打印机驱动程序。 首先详细地分析了w i n d o w sx p 下的打印体系结构,明确了打印体系结构的 组成和每部分组件的功能。 其次,结合实验,详细地分析了打印机驱动程序的体系结构,明确了打印机 驱动程序的组成、功能、打印流程和开发打印机驱动程序的两种方法。 接着针对提高打印机界面灵活性的需要,设计了基于c p s u i ( 公用属性表单 用户接口) 的打印机设备属性表单和打印文档属性表单。首先分析c p s u i 的功能、 提供的函数以及打印机接口动态链接库和c p s u i 的交互;接着分析利用c p s u i 创建打印机界面的流程和方法;最后为打印机设备和打印文档创建了属性表单, 实现了为打印机界面自由增加属性表单页的功能。 最后分析和设计了打印机图形动态链接库,实现了一个打印机驱动程序,实 现了文本、图形、图像的打印。针对打印机图形动态链接库包含的函数众多,功 能复杂的特点,本文采用模块化的设计方案,将打印机图形动态链接库分成七大 模块,通过这些模块间的相互通信、协调工作实现打印功能。 关键词:打印机驱动程序打印机接口动态链接库打印机图形动态链接库 公用属性表单 a bs t r a c t p r i n t e ri so n eo ft h em o s ti m p o r t a n to u t p u t d e v i c ea n dp r i n t e rd r i v e ri so n e o ft h e n e c e s s a r yp a r t so ft h ec o m p o n e n t st h a tm a k et h ep r i n t e rw o r kn o r m a l l y i ti sn e c e s s a r y t om a s t e rt h et e c h n o l o g yo fd e v e l o p i n gp r i n t e rd r i v e ri nm a i n s t r e a mo p e r a t i n gs y s t e m i ft h ed e c i s i o n m a k i n gp o w e ro fi n t e l l e c t u a lp r o p e r t yp r i n t e rw i l lb ed e s i g n e d s ot h e a n a l y s ea n dd e s i g no fp r i n t e rd r i v e ri nw i n d o w s x pa r ed i s c u s s e di nt h i st h e s i s f i r s t l y , t h ep r i n ts y s t e ma r c h i t e c t u r ei nw i n d o w s x pi sp a r t i c u l a ra n a l y z e di nt h i s t h e s i s t h ec o m p o n e n t so fp r i n ts y s t e ma r c h i t e c t u r e a n dt h ef u n c t i o no fe a c h c o m p o n e n t a r ed e f i n e d s e c o n d l y , t h ep r i n t e rd r i v e ri nw i n d o w sx p i sp a r t i c u l a ra n a l y z e di nt h i st h e s i s p r i n t e rd r i v e rc o m p o n e n t ,p r i n t e rd r i v e rf u n c t i o n ,t h em e t h o do fd e v e l o p i n gp r i n t e r d r i v e ra n dt h ef l o wo fp r i n t e ra r em a i n l ya n a l y z e di nt h i st h e s i s i ns u c c e s s i o n ,p r i n t e rp r o p e r t ys h e e ta n dp r i n td o c u m e n tp r o p e r t ys h e e tb a s e d c p s u i ( c o m m o np r o p e r t ys h e e tu s e ri n t e r f a c e ) a r ed e s i g n e d f i r s t l y , t h ef u n c t i o no f c p s u i ,t h ef u n c t i o nt h a ti sp r o v i d e db yc p s u ia n dt h ef l o w o fd e v e l o p i n gt h e i n t e r f a c ea r em a i n l ya n a l y z e di n t h i st h e s i s ;s e c o n d l y , t h ef l o wa n dt h em e t h o do f a d d i n gp r o p e r t ys h e e ta r ea n a l y z e d ;l a s t ,p r i n t e rd e v i c ep r o p e r t y s h e e ta n dp r i n t d o c u m e n tp r o p e r t ys h e e ta r ea d d e da n dp r o p e r t ys h e e tc a nb ea d d e df r e e l yt op r i n t e r i n t e r f a c e a tl a s t ,p r i n t e rg r a p h i cd l l ( d y n a m i cl i n kl i b r a r y ) i sa n a l y s e da n dd e s i g n e d p r i n t e rd r i v e ra r ed e s i g n e da n dt e x t ,g r a p h i ca n di m a g ec a nb ep r i n t e db yt h ep r i n t e r d r i v e r b e c a u s et h ep r i n t e rg r a p h i cd l li n c l u d e sl o t so ff u n c t i o n sa n dt h ef u n c t i o n s h a v ev e r yc o m p l e xf u n c t i o n s ,t h ed e s i g ns c h e m eo fm o d u l a r i z a t i o ni sa d o p t e di nt h i s p a p e r t h ep r i n t e rg r a p h i cd l l i ss e p a r a t e di n t os e v e nm o d u l e sa n dt h e s em o d u l e s c o m m u n i c a t ee a c ho t h e r t op e r f o r ms t r o n ga b i l i t i e s k e yw o r d s :p r i n t e rd r i v e rp i n t e ri n t e r f a c ed l lp r i n t e rg r a p h i cd l l c p s u i 创新性声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不 包含其他人已经发表或撰写过的研究成果;也不包含为获得西安电子科技大学或 其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做 的任何贡献均已在论文中做了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名:基牟 关于论文使用授权的说明 本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究 生在校攻读学位期间论文工作的知识产权单位属西安电子科技大学。本人保证毕 业离校后,发表论文或使用论文工作成果时署名单位仍然为西安电子科技大学。 学校有权保留送交论文的复印件,允许查阅和借阅论文;学校可以公布论文的全 部或部分内容,可以允许采用影印、缩印或其它复制手段保存论文。( 保密的论文 在解密后遵守此规定) 本人签名:亟叁雏 导师签名:蟮丑良k日期丝丛牡 第一章绪论 第一章绪论弟一早三百y 匕 1 1 引言 设备驱动程序【l 】是一个包含了许多操作系统可调用例程的容器,这些例程可 以使硬件设备执行相应的动作。打印机驱动程序是一种设备驱动程序,它驱动打 印机完成打印工作。打印机是最重要的一种输出设备,并且自微软推出w i n d o w s 操作系统以来,目前w i n d o w sx p 已经成为个人计算机的主流操作系统,大多数 的打印任务也是基于这个平台的。打印机驱动程序作为操作系统和打印机之间联 系的桥梁,从某种程度上来说打印机驱动程序的性能决定着所开发的打印机产品 的前景和命运。因为佳能、惠普、爱普生等国际大公司重视打印机驱动程序的开 发,所以目前的打印机市场基本被他们所垄断,而国内的公司和科研单位在这个 领域起步较晚,且对打印机驱动程序的研究和开发也不够重视,因而在技术水平 上要明显落后于国外,在市场上也缺乏竞争力。所以研究当前主流平台w i n d o w s x p 下的打印机驱动程序显得尤为重要。 国外打印机驱动程序的研究开始较早,像惠普、佳能、爱普生都有自主产权 的支持自己品牌的打印机驱动程序,在打印机驱动程序的开发方面处于领先地位。 同时为了简化打印机驱动程序的设计微软提出了通用+ 小型的打印机驱动程 序体系,即微软通用打印机驱动程序( m i c r o s o f tu n i v e r s a lp r i n t e rd r i v e r ) ,它是 由一个统一的驱动引擎( u n i d r v ) 和一个或几个数据文件( g p d ) 组成。打印机驱动 开发人员只要针对特定的打印机型号,按照一定的形式,制作相应的数据文件来 描述打印机特性和打印机所使用的命令,就可以完成驱动程序的开发。 日本富士施乐公司提出了自己的多机种对应统一化设计思想,即把使用相同 打印机控制语言的打印机驱动程序所能实现的各个不同特性看成一个个不同的特 性对象,并把打印机驱动程序分成参数文件和公共文件两个部分。参数文件部分 包括了不同的对象本身固有的各个特性;公共程序部分则提供了一个通用的处理 流程。这样,通过使用通用的公共程序框架,加上每个型号打印机各自不同的参 数文件,就可以构成该型号打印机的打印机驱动程序。 1 2 课题的提出和论文主要工作 当前w i n d o w sx p 是最主流的操作系统,研究和开发基于w i n d o w sx p 下的打印 机驱动程序有着非常重要的现实意义,可以将所设计的打印机驱动程序用于自主 2 一 w i n d o w sx p 下打印机驱动程序的分析与设计 开发的打印机产品,这样一方面降低成本,另一方面可以提高产品的灵活度。 尽管微软已经提出了通用打印机驱动程序,简化了打印机驱动程序的开发, 但是这种通用打印机驱动程序只适合小幅面的打印机、无法直接用于大幅面打印 机( 绘图机) ,同时其功能也不够灵活,开发者无法在图形引擎中加入自己的分 色、数字半调、色彩匹配等对提高打印输出质量至关重要的算法,因此开发人员 迫切需要设计自己的打印机驱动程序,以便在整体上把握驱动程序,加入开发者 需要的各种算法。 开发打印机驱动程序不同于一般的应用程序,它具有一定的难度,首先开发 人员必须对打印体系结构和打印机驱动程序的结构有着深入透彻的理解,这需要 开发者对打印工作流程进行详细的分析。其次由于缺少具体的资料,对驱动程序 的实际工作流程需要开发者进行大量的实验来确定。这些难点一方面说明了开发 打印机驱动程序的不易,另一方面也说明了开发打印机驱动所具有的积极意义。 基于以上的原因,结合计算机外部设备研究所“十一五”承担的打印机研发 任务,提出了本课题,希望设计实现能够满足自主设计的打印机要求的驱动程序 原型,同时可以对国内打印机驱动程序的研究有一些参考和促进作用。 打印体系结构非常复杂,即使打印简单的文本也要经历非常复杂的过程,对 于打印体系结构来说,最重要的有三部分:打印机界面,打印处理程序以及打印 机和计算机的接口。本文主要分析打印机界面和打印处理程序。对于打印机和计 算机的接口,本文只做简单介绍。综上,本文主要完成的工作有: ( 1 ) 通过阅读相关资料和文献,结合实验,分析打印体系结构和打印机驱动程 序的结构和打印流程,这部分工作是开发打印机驱动程序的基础。 ( 2 ) 分析和设计打印机界面,在明确打印机驱动程序流程的基础上,编写代码 设计打印机界面。 ( 3 ) 分析和设计打印处理程序,也就是分析和设计打印机图形动态链接库,实 现文本、图形、图像等的打印。 1 3 论文的结构 本文首先分析打印体系结构、打印机驱动程序的结构,接着分析和设计打印 机界面和打印机图形动态链接库,实现一个打印机驱动程序,最后总结本文的成 果和不足,对未来打印机驱动程序的发展进行展望。具体章节安排如下: 第一章主要介绍打印机驱动程序的重要作用,当前打印机驱动程序的发展以 及开发打印机驱动程序的目的和意义,选题的必要性。 第二章重点分析打印体系结构、打印系统的组成和各个组成部分的功能,从 宏观上阐述应用程序创建一个打印作业到打印机完成打印工作需要经历的步骤和 第一章绪论 组件,分析各个组件的功能、组成,最后介绍打印机和计算机进行通信的语言。 第三章主要分析打印机驱动程序的体系结构,首先分析打印机驱动程序的组 成、功能,然后结合具体的实验,给出创建一个打印作业,打印机驱动程序各个 模块之间的调用关系,也就是打印机驱动程序的流程。 第四章主要阐述如何设计一个打印机界面,结合具体的实验,给出设计打印 机界面需要用到的方法和思想。 第五章主要阐述如何设计一个打印机图形动态链接库,首先采用模块化的思 想将打印机图形动态链接库分成功能不同的七个大模块;然后分析应用程序创建 一个打印作业后模块之间的调用顺序;最后详细的分析各个模块的功能。 第六章实现一个打印机驱动程序,对本文所设计的打印机驱动程序的功能进 行检验。 最后总结论文的成果和不足之处,对未来打印机驱动程序的开发进行展望。 第二章打印体系结构 第二章打印体系结构 为了更好的理解打印机驱动程序在整个打印系统中的功能和地位,从而更好 的设计打印机驱动程序,所以首先必须对打印整体的体系结构有一个透彻准确的 理解,本章将详细分析打印体系结构,明确从创建一个应用程序到打印机完成打 印工作整个的工作流程。 2 1 打印体系结构分析 w i n d o w sx p 的打印体系结构由打印假脱机和一系列打印驱动程序组成。应 用程序通过调用设备无关的w i n 3 2 打印和g d i ( 图形设备接口) 函数,创建打印 作业并将其发送到不同的设备,如激光打印机、向量绘图仪、光栅打印机以及传 真机。打印机驱动程序包括一个允许用户控制可选属性的用户接口。 整个的打印流程如下:应用程序通过调用g d i 创建打印作业,应用程序对 g d i 的调用传递到g d i 图形引擎,该引擎将绘制指令脱机处理为e m f 文件( 增 强型图元文件) 或者直接连接到打印机驱动程序上,然后将打印图像传递到假脱 机系统。此时应用程序完成了打印文档的任务,用户可以自由使用应用程序完成 其他任务,而打印假脱机则保证文档被打印。打印假脱机将页面布局信息和作业 控制指令加入数据流,然后将数据流发送到打印处理器,打印处理器检查打印假 脱机文件的格式,对于e m f 文件,它将内容的每一页回放给g d i ,g d i 把g d i 命令分解成d d i ( 图形设备接口) 定义的绘制图元,并把绘制图元送到打印机驱动 程序,打印机驱动程序将绘制图元绘制成打印机语言格式的原始数据,例如p c l 等,接着原始数据被送到打印假脱机系统。接着打印假脱机将数据发送到语言监 视器,语言监视器把数据发送到端口监视器,端口监视器用o s 文件系统a p i 往 硬件端口写数据,最后数据被发送到打印机。 假脱机和打印机组件是可以替换的,这使得硬件供应商可以很容易地对新硬 件进行支持。 整个打印体系结构如图2 1 所示: 5 6 一 w i n d o w sx p 下打印机驱动程序的分析与设计 图2 1 打印体系结构图 2 1 1g d i ( 图形设备接口) g d i 2 j 是微软设计的一套a p i ,为应用程序提供图形设备无关的接口,包括视 频显示器、打印机、绘图仪和传真机。在应用程序一侧,它提供了w i n d o w sa p i ( a p p l i c a t i o np r o g r a m m i n gi n t e r f a c e ) 接口以供应用程序调用,在驱动程序一侧, 它规定了设备驱动接口( d e v i c ed r i v e ri n t e r f a c e ) ,也就是打印机驱动程序开发的 标准。 g d i 为应用程序和图形驱动程序提供中间支持。应用程序调用w i n 3 2 g d i 来 请求输出图形,这些请求路由到内核模式的g d i ,内核模式g d i 发送这些请求到 相关的驱动程序,内核模式的g d i 是系统提供的不能被替换的模块。然后g d i 和驱动程序进行交互,图2 2 显示了驱动程序和g d i 交互的过程。 第二章打印体系结构 g 。一引擎 g d i 调用d d i 调用 图形驱动程序c 包括打印机驱动程序) 7 一 图2 2 图形驱动和g d i 交互图 g d i 通过一系列的图形设备驱动接口( 图形d d i ) 与图形驱动程序进行通信。 这些函数用其前缀d r y 来标识。信息通过这些入口点的输入输出参数在g d i 和 驱动程序之间传递。驱动程序必须支持某些d r v x x x 函数用于g d i 调用。在返回 g d i 之前,驱动程序通过执行在其相关硬件上相应的操作来支持g d i 请求。 g d i 本身包括许多图形输出能力,可以降低驱动程序支持这些能力的需要, 从而减小驱动程序的大小。g d i 也提供驱动程序可以调用的服务函数,进一步减 小了驱动程序必须支持的图形输出能力。g d i 服务函数用其前缀e n g 标识,而提 供访问g d i 维护的结构的函数用x x x o b jx x x 来命名。 综合而言,g d i 与打印相关的功能,主要有以下三个方面: ( 1 ) 为应用程序提供打印a p i 函数 对于应用程序来说,在显示器上和在打印机设备上描述对象( 例如文本、图 形或图像) 时使用的a p i 函数是相同的。但是还有一些a p i 函数是打印机所特有的, 例如打印任务的开始和结束,页的开始和结束等。但是对于应用程序而言,打印 时可以利用的a p i 函数是统一的。应用程序只需调用这些标准的a p i 函数,就可以 完成打印任务,而不需要考虑到底在使用什么打印机设备,从而实现了设备无关 性,方便了应用程序的开发。 ( 2 ) 补充打印机的绘制功能 如果打印机驱动程序支持某个a p i 函数所对应的功能的话,应用程序就可以直 接使用该打印机驱动程序提供的对应的d d i 函数;如果一个a p i 函数所对应的功能 打印机驱动程序并不支持的话,就将由g d i 根据情况自动进行处理。例如,如果 打印机没有画圆的功能,那么当g d i 询问打印机驱动程序的时候,驱动程序会告诉 g d i ,该打印机没有画圆的功能。那么g d i 可能就会调用画直线的功能,通过画一 系列的水平线来模仿一个圆。但是,这种情况下,打印的质量和速度都会有不同 8 一 w i n d o w sx p 下打印机驱动程序的分析与设计 程度的降低。 ( 3 ) 控制打印机进行工作 g d i 通过调用打印机驱动程序的函数来控制打印机工作。d d i 就是g d i 为所有 打印机驱动程序规定的共同的标准。这就是说,打印机驱动程序必须按照d d i 的标 准进行开发。打印的时候g d i 按照应用程序的指示,调用打印机驱动程序中相应的 函数,逐步完成整个打印过程。 所以对于应用程序开发人员而言,只要为显示设备建立合适的设备上下文 ( d e v i c ec o n t e x t :d c ) ,然后通过调用g d i 函数进行打印设置和绘制,就可以完成想 要的打印操作,而无需考虑设备的实际情况。这种设备无关性的结构设计,使得 应用程序和驱动程序的开发完全独立开来,极大地方便了二者的开发。 2 1 2 打印机驱动程序 打印机驱动程序【2 】是操作系统和打印机之间的桥梁,它是打印机设备在 w i n d o w s 操作系统上的代理。打印机驱动程序提供d d i 规定的一系列接口函数供 g d i 调用,同时在这些函数中实现打印机控制语言以驱动打印机工作。与其他显 示设备驱动不同的是,打印机驱动程序并不直接操纵硬件,而是把数据流发给假 脱机组件,假脱机组件再把数据发送到相应端口,最后发送到打印机设备。关于 打印机驱动程序的具体内容将在第三章详细讨论。 2 1 3 打印假脱机 打印假脱机是打印体系结构中非常重要的组件,打印机驱动程序处理后的数 据一般不直接发送到打印机,而是先发送到打印假脱机,本节详细分析打印假脱 机的组成和功能。 2 1 3 1 打印假脱机 假脱机技术【3 】是指当主机处理器给外部设备传送数据时为了减少占用主机处 理器的时间而采用的把辅助存储器当作端口的缓冲存储器,具体的发送工作在后 台处理的一种方法和技术。w i n d o w sx p 打印假脱机是打印子系统的一部分,负责 把打印作业发送到本地和网络打印机。由于假脱机本身具有许多组件,所以一般 也被称为一个打印系统。w i n d o w sx p 打印假脱机由一套微软提供的和一些可选的 厂商提供的组件组成,打印假脱机具有以下重要意义: ( 1 ) 后台发送避免了长时间占用c p u ,使控制权迅速返回给用户以便进行其它 第二章打印体系结构 9 一 操作。 ( 2 ) 便于多路由输出,可以将打印作业调度到本地或网络打印机,或者写到磁 盘文件以便随时打印。 ( 3 ) 将底层有关端口的操作以独立部件实现,简化了系统上层模块的实现。打 印假脱机的主要作用【4 】如下: 决定一个打印作业是本地处理还是通过网络处理。 与打印机驱动程序相连接,接收由g d i 仓 建的数据流,并向特定类型的打 印机输出。 可以将数据假脱打印到文件。 在逻辑打印机队列里选择第一个可用的物理打印机。 将假脱机格式的数据流( 例如e m f ) 转换为可以被发送到打印机硬件的 格式( 例! t 1 p c l ) 。 发送数据流到打印机硬件。 为假脱机组件和打印机表格维护一个基于注册表的数据库。 2 1 3 2 打印假脱机组件 微软w i n d o w sx p 打印假脱机【2 1 最基本的组件如图2 3 所示: 图2 - 31 段脱机组件图 下面将详细的介绍打印假脱机组件。 ( 1 ) w i n s p 0 0 1 d r v 这是一个到假脱机的客户端接口。它导出的函数构成了假脱机的w i n 3 2a p i 。 并对存取服务器提供r p c 栈( g d i 是最基本的客户端,但是应用程序也可以调用一 些w i r d 2 函数) 。用户应用程序可以利用w i n s p 0 0 1 d r v 导出的函数来查询打印机、 一1 0 w i n d o w sx p 下打印机驱动程序的分析与设计 打印任务、改变打印机设置、查询打印机设置、加载打印机驱动程序接口动态链 接库来显示和设置打印机属性页。例如,可以用它导出的o p e n p r i n t e r 0 、 w r i t e p r i n t e r 0 、c l o s e p r i n t e r o 把原始数据发送到打印假脱机,而无需经过正常的g d i 绘制、打印机驱动程序绘制的例程。 ( 2 ) s p o o l s v e x e 这是一个假脱机的a p i 服务器。它作为w i n d o w sx p 的一个服务来实现的,并 且随着操作系统的启动而启动。这一模块对服务器端的假脱机的a p i 导出一个r p c 接口。客户端的s p o o l s v e x e 包括w i n s p 0 0 1 d r v ( 本地) 以及w i n 3 2 s p l d l l ( 远程) 。该模 块实现一些a p i 函数,但是许多函数调用通过路由的方式通知到打印提供者。 ( 3 ) s p o o l s s d u 这是一个假脱机的路由器。它决定调用哪一个打印提供者,它基于打印机的 名称或每一个函数调用提供的句柄,并将函数调用传递到正确的提供者。当用户 应用程序调用w i n s p 0 0 1 d r v 导出的o p e n p r i m e r o 时,调用传递给s p o o l s v e x e ,它调用 打印假脱机路由器,打印假脱机路由器调用打印提供者的o p e n p r i n t e r 0 ,明确其中 哪一个打印提供者提供了句柄,表示该打印提供者识别出了打印机名字,这个句 柄被返回给应用程序,以便后面的调用能够传递给正确的打印提供者。 ( 4 ) 打印提供者 打印提供者支持专用的打印设备。 打印提供者是打印假脱机的核心组件,理解打印提供者将有助于更好的理解 打印假脱机的功能。 2 1 3 3 打印提供者 打印提供者【5 j 负责将打印作业直接送到本地或远程的打印设备。它们同样负责 打印队列管理的操作,如开始、停止以及枚举一个服务器端的打印队列等。打印 提供者定义了一个高层的、机器独立的、操作系统独立的打印服务器的视图。 所有的打印提供者都提供一个普通的打印提供者能力集。这些能力由一套a p i 函数定义,并被假脱机发送器( s p o o l s s d 1 1 ) 调用。 许多由打印提供者定义的函数需要一个打印句柄作为输入,假脱机的客户端 在w i n s p 0 0 1 d r v 中通过调用o p e n p r i n t e r 0 获取一个打印机的句柄,该客户端调用a p i 服务器( s p o o l s v e x e ) 。假脱机发送器( s p o o l s s d 1 1 ) 调用每一个打印提供者的 o p e n p r i n t e r o 函数直至其中一个函数提供一个打印机的句柄并且返回一个值,即 指明打印提供者识别出了专用的打印机名称。发送器此时则返回它的句柄到a p i 服务器,发送器的句柄包括打印机的句柄以及打印提供者的句柄。该句柄返回到 应用程序,这样应用程序后续的调用就可以直接送到正确的提供者和打印机。 第二章打印体系结构 微软在w i n d o w sx p 中提供以下打印提供者: l o c a l s p l d u 本地打印提供者。从本地服务器进行管理,处理所有到本地打印机的打印作业。 w i n 3 2 s p l d n w i n d o w s 网络打印提供者。处理所有的到远程w i n 3 2 ( w i n d o w sn t 脚i n d o w s x p w i n d o w sf o rw o r k g r o u p ) 服务器的打印作业,当作业到达远程服务器,它又 传递给服务器的本地打印提供者。 n w p r o v a u d l l n o v e l ln e t w a r e 的打印提供者,直接处理打印作业至l j n o v e l ln e t w a r e 的打印服 务器。 i n e t p p d l l h t t p 打印提供者。处理发送到u r l 的打印作业。 打印提供者主要完成以下功能: 打印队列管理:增加、删除、打开、关闭、枚举及设置打印队列的参数,提供 打印队列状态变化的通知。 打印机驱动程序管理:增加、删除、枚举及指定一个打印机驱动程序的目录。 打印作业创建:开始和结束一个文档,开始和结束一个文档页面,将作业的数 据流写入一个端口,并读取打印机的状态信息。 打印作业安排:安排、枚举、并设置打印作业的参数。 表格管理:增加、删除、枚举并设置打印表格的参数。 打印处理器管理:增加、删除、枚举、指定目录及打印处理器支持的数据类型。 打印监视管理:增加、删除以及枚举打印监视器。 端口管理:增加、删除、配置、枚举并设置打印机端口的参数。 注册表管理:创建、删除并枚举与打印提供者相关的注册表键及值。 其他能力:显示消息框、关闭打印提供者、读一个内存映像的假脱机文件、提 供与端口监视器用户接口d l l 与端口监视器服务器端d l l 的通信通道。这 些能力都是按照打印提供者定义的一套函数来实现的。 2 1 4 打印处理器 打印处理器【6 1 是用户模式的一些d l l ,主要负责转换打印作业的假脱数据到打 印监示器的格式。也负责处理应用程序对暂停、重新开始及撤消打印作业等的请 求。打印处理器由本地打印提供者调用。打印作业的假脱机数据包含在一个假脱 机文件中,打印处理器读取这些文件,在数据流上执行转换操作,并将转换的数 据写到假脱机,假脱机然后发送数据流到合适的打印监示器。m i c r o s o f t 提供的缺 里 w i n d o w sx p 下打印机驱动程序的分析与设计 省的打印处理器是w i n p r i n t ,它支持原始和增强型图元文件两种假脱机文件格式, 如果打印机开发人员需要处理其他文件格式,就需要自己开发并使用打印处理器。 2 1 5 语言监视器 计算机和打印机的通信方式 刀,一般来说主要有以下几种: l p r s m b n e t w a r e 并行口 串行口 u s b p o r t 9 1 0 0 对于每一种通信方式,都有专门的语言监视器和端口监视器与之对应,本小 节介绍语言监视器,下一小节介绍端口监视器。 r 语言监示器 2 1 是一些用户模式的d l l ,主要用于支持打印机的双向通信、监视 打印机状态、获取并处理一些事件。对于支持双向通讯的打印机,开发人员需要 提供自己的语言监视器,而对于只有单向通讯( 只支持主机向打印机单向信息传送) 的打印机是可以不需要打印作业语言监视器的。语言监视器主要提供以下两个功 能: ( 1 ) 在打印假脱机与双向打印机之间提供一个全双工的通信通道,从而具有提 供软件可存取的状态信息的能力。 ( 2 ) 增加打印机控制信息到数据流,如由打印机作业语言定义的命令等。 语言监示器是可选的,并且只与特殊的包含在打印机的i n f 中的打印机类型相 关,如果一个语言监示器与打印机关联,语言监示器从打印处理器收到打印机的 数据流,修改它并将之传递到打印机的端口监视器。 2 1 6 端口监视器 端口监示器【2 】由用户模式的一些d l l 组成。它们负责在用户模式的打印假脱 机及访问i o 硬件端口的内核模式的端口驱动程序之间提供通讯。一个端口监示 器通常使用c r e a t e f i l e o ,w r i t e f i l e o ,r e a d f i l e o 及d e v i c e d c 0 ,c o n 仃0 1 0 函数 与内核模式的端口驱动程序通讯。端口监示器也负责管理及配置一个服务器的打 印机端口。 w i n d o w sx p 用户的“打印机 视图实际上是一个打印队列,是一个或多个物 第二章打印体系结构 理打印机设备都可以连接到的队列。一个端口是一个在打印队列和一个单一打印 机设备之间的物理连接。每一个端口监视器支持一个或多个的一种或多种端口类 型的实例。例如,l o c a l m o n d l l 这一示例的端口监示器可以支持所有的服务器的本 地c o m 及l t p 端口。 对表示多个打印机设备( 通过多个端口) 的打印机队列来说,假脱机发送每个打 印作业到第一个可用的端口。如果端口监示器指明一个可用端口忙或者遇到错误, 假脱机将重新提交作业到队列,指定另外一个端口监示器支持的可用端口。 除了l o c a l m o n d l l ,w i n d o w sx p 提供几个附加的端口监示器。w i n d o w sx p , p j 艮务 器资源开发包中对每一个这样的端口监示器都做了描述。 对w i n d o w sx p 来说,每一个端口监示器被分为两个d l l 。 ( 1 ) 端口监示器u id l l 端口监示器的用户接e l d l l 包含用户接口的功能并在打印客户系统上执行。 这- - d l l 必须驻留在客户系统的s y s t e m 3 2 子目录中。 ( 2 ) 端口监示服务器d l l 一个端口监示器的服务器d l l 包含端口通讯功能并在打印服务器上执行。它 必须显示一个用户的接口。 2 2 打印控制语言 打印机要和计算机进行通信,必须要有相应的打印控制语言,驱动程序将打 印命令嵌入要打印的数据流中,然后将嵌入了打印命令的数据传递给打印机,打 印机对此数据进行解析,完成打印任务。打印控制语言【7 】主要分成两类,任务控制 语言( j o bc o n t r o ll a n g u a g e :j c l ) 和页面描述语言( p a g ed e s c r i p t i o nl a n g u a g e :p d l ) 。 由于在w i n d o w s 系统中,打印作业管理的基本单位是“打印任务 ,所以把打印机 控制语言中有关任务控制的部分分离出来,进行与任务相关的设置,如打印份数 等,成为任务控制语言。而关于页面描述的部分则形成页面描述语言。 2 2 1 任务控制语言 任务控制语割7 j 的作用主要是进行任务控制( 例如开始打印任务、结束打印任 务、终止打印任务等) 和设置打印任务的打印方式( 例如输出纸盒的选择、是否 进行双面打印等) 。常用的任务控制语言有:p j l ( p r i m e rj o bl a n g u a g e ) :惠普及 其兼容机使用;e j l ( e p s o nj o bl a n g u a g e ) :爱普生公司的任务控制语言;n j j l ( n e c j o bl a n g u a g e ) :n e c 公司的任务控制语言;x j c l ( x e r o xj o bc o n t r o ll a n g u a g e ) :施 乐公司的任务控制语言。 一1 4 w i n d o w sx p 下打印机驱动程序的分析与设计 2 2 2 页面描述语言 与早期的逐行打印不同,页面描述语言r 7 】能够描述“页 中所要打印的对象, 如文本、图形和图像等。系统只要给出它们的大小、色彩、位置等参数,打印机 设备就可以在指定的位置打印出所要的结果,这样大大增加了打印的灵活性。目 前,各大打印机生产厂商都有自己的页面描述语言推出,由于产品兼容性、打印 机本身功能差异以及版权等原因,页面描述语言一直难以统一。但是a d o b e 公司的 p o s t s c r i p t 语言和h p 公司的p c l ( p r i n t e rc o n t r o ll a n g u a g e ) 语言,作为设计领域和一 般用途的标准的页面描述语言,已获得了各大打印机厂商广泛的支持。 页面描述语言的工作流程首先在打印机一端将打印内容解释成标准的页面描 述文件,这种文件可以被所有采用这种语言的打印机所识别,传递到打印机的控 制器中,然后在打印控制器中将页面描述文件解释成可以打印的图像。 p c l 语言由于其开放性,即其他打印机厂商可以在其打印机产品中自由模仿和 使用p c l 语言,降低了使用p c l 语言的打印机的成本,所以得到了广泛的应用。 p c l 语言最初是为点阵打印机设计的,p c l 3 是第一个得到广泛应用的版本, 但它只支持一些简单的打印任务。p c l 4 虽然还只能应用在个人打印机中,但增 加了对图形打印的支持,但由于解释工作比较简单,p c l 4 比后期的p c l 5 和p c l 6 对打印控制器的要求要低很多。 p c l 5 是h p 公司为它的激光打印机l a s e r j e t i i i 设计的,它开始支持矢量字库 和矢量图形描述,实现了w y s i w y g ( w h a ty o us e e i sw h a ty o ug e t ,所见即所得) , p c l 5 中也使用了各种压缩技术来减小数据量,加快数据传输。p c l 5 e 开始支持 双向数据通讯,从而使打印机可以向计算机发送打印机的状态信息。p c l 5 c 增加 了对彩色打印的支持。 1 9 9 6 年h p 公司发布了p c l 6 ,它更加灵活,是一个目标朝向的控制语言, 实现了更好的w y s i w y g ,可以更好地处理w e b 页面。 第三章打印机驱动程序体系结构 第三章打印机驱动程序体系结构 在w i n d o w sx p 环境下,打印机驱动程序是一个动态链接库,包括打印机图 形动态链接库和打印机接口动态链接库,这个动态链接库由一系列图形函数组成, 这些图形函数将设备无关的图形命令转化为设备相关的命令和数据。 打印机驱动程序的作用是提供d d i 所规定的一系列接口函数,供g d i 调用, g d i 将对应用程序的打印要求转化为对指定的打印机驱动程序d d i 接口的调用, 进而由这些d d i 函数来完成从设备无关信息到设备相关信息的转化,这些d d i 函数主要实现图形图像处理、文本处理、用户界面支持等功能。同时在这些函数 中实现打印机控制语言,以驱动打印机工作。 由第二章对打印体系结构的分析可知,打印机驱动程序一般不与打印机硬件 直接通信,而是将打印机直接可用的数据流写回到用户模式的打印假脱机,打印 假脱机把数据送到打印处理器,再送到端口监视器,端口监视器用i o 文件调用 内核模式i o 驱动程序。w i n d o w sx p 允许打印机驱动程序是内核模式动态链接 库,也可以是用户模式动态链接库。 3 1 打印机驱动程序的功能 w i n d o w sx p 打印机驱动程序主要完成以下功能【8 】: 通过提供g d i 不能支持的特定打印机的绘制能力,帮助g d i 绘制打印作 业。打印机驱动程序应该具有的绘制功能主要包括: ( 1 ) 文本绘制,包括字体、大小、粗体、斜体、下划线等格式。 ( 2 ) 图形绘制,包括直线、曲线、圆、矩形、椭圆等图形。 ( 3 ) 图像绘制,即位图绘制,包括尺寸变换等。 发送绘制的图像数据流到打印假脱机。打印机驱动程序完成绘制操作后将 把绘制好的数据流发送到打印假脱机进行下一步的处理。 提供与打印机及打印文档相关的可修改配置参数的用户接口,如选择的纸 张来源、打印的份数、图像的精度及方向等等。用户可以通过这个接口进 行相关参数的选择。 3 2 打印机驱动程序组件 设计一个打印机驱动程序,首先必须明确打印机驱动程序包括哪几个组件, w i n d o w sx p 下打印机驱动程序的分析与设计 这样才能有的放矢,明确开发一个打印机驱动程序需要设计的组件。 w i n d o w sx p 打印机驱动程序由以下组件1 2 j 组成: 打印机图形动态链接库:帮助g d i 处理打印作业,并将处理后的数据流发 送到打印假脱机。 打印机接口动态链接库:提供一个用户接口实现对打印机参数的配置,同 时提供一个假脱机可以调用用来通知驱动程序系统打印相关事件的接口。 ( 1 ) 打印机图形动态链接库 打印机图形动态链接库【2 j 实现以d r y 为前缀的一系列图形d d i 函数,这些函数 有如下两个方面的功能: 支持g d i 处理打印作业。打印机图形动态链接库可以支持d d i 绘制函数来 处理那些必须以特定设备方式执行以及那些不能由g d i 绘制引擎完成的 绘制操作。 将处理后的数据流发送到假脱机。打印机图形动态链接库通常以r a w 数 据类型( 包括命令序列) 产生一个输出流,假脱机可以通过打印监视器将 数据流送到打印机硬件。 对于一个特定类型的打印机,打印机图形动态链接库必须提供的绘制函数依 赖于硬件的绘制能力,包括以下情形: g d i 绘制引擎利用g d i 管理的表面执行所有的绘制工作,图形动态链接库 不提供任何d d i 绘制函数。 图形动态链接库提供一些d d i 绘制函数利用g d i 管理的表面和g d i 绘制引 擎一起工作。由图形动态链接库提供的d d i 绘制函数可以选择性的回调 g d i 绘制引擎支持的绘制服务。 图形动态链接库利用设备管理的表面提供d d i 函数来处理所有的绘制工 作。 打印机图形动态链接库并不是在打印作业假脱为增强型图元文件时调用,而 是在e m f 打印处理器回放e m f 记录时调用合适的图形动态链接库。 打印机图形d l l 不能发送绘制的打印作业到硬件,被绘制的数据流返回到假 脱机,假脱机发送该数据流到一个端口监视器,该端口监视器是一个用户模式的 接口到一个内核模式的本地并行端口或网络端口的微端口驱动程序。 对于w i n d o w sx p ,所设计的图形动态链接库,既可以在用户模式下执行,也 可以在内核模式下执

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论