打印程序开发资料.docx
《打印程序开发资料.docx》由会员分享,可在线阅读,更多相关《打印程序开发资料.docx(28页珍藏版)》请在三一办公上搜索。
1、基于组件模型的虚拟打印系统的研究与实现虚拟打印是利用某种方式截获操作系统的打印任务,将打印任务转换为图像文件并保存在指定目录的系统。 通过虚拟打印系统,用户可以将任意可打印的文档转换为统一的图像文件,由一种应用程序进行浏览。因 此在Web环境、多客户端情况下,客户端不需要为浏览多种应用程序的文件而安装多种应用程序,便于实 现瘦客户端和降低系统的软件成本。本文通过研究比较现有的虚拟打印系统,提出建立基于组件模型的虚 拟打印系统,主要介绍的技术包括:虚拟打印机的实现、虚拟打印机的安装卸载、系统二次开发接口等。1 Windows打印系统结构虚拟打印基于Windows打印体系,是对Windows打印系
2、统的一种应用及拓展。微软的Windows NT系列 打印体系结构由打印假脱机和一套打印驱动程序组成。应用程序对Win32 GDI函数的调用传送到GDI图形引擎,GDI图形引擎可以将绘制指令假脱到一个EMF 文件中,或者与打印驱动程序连接,向假脱机绘制一个可打印的图像。假脱机组件解释EMF文件,他们可 以在数据流中插入页面布局信息以及作业控制指令。然后假脱机将数据流发送给具有目标打印机I/O端口 的串行、并行或网络端口的驱动程序。其体系结构如图1所示。2虚拟打印系统的研究按照获取打印任务方式的不同,可以将虚拟打印系统分为3种类型:重写Print Processor,在假托模块中 实现转换,例如M
3、abuse.De的VPrinter;采用回调机制在打印任务发送到Spoolez之前获取打印数据流, 例如NortheastData公司的Image Printer Driver;通过监视Port Monitor获取打印任务数据,例如Adobe 公司的 Adobe AcrobatWriter。目前绝大部分虚拟打印系统都是独立的系统,使用各自的文件格式来保存打印结果,很少以组件的方式提 供二次开发接口,使得上述虚拟打印系统很难与其他应用系统进行集成。本文研发的基于组件模型的虚拟 打印系统,采用重写Print Processor方式实现打印任务的获取。该系统提供了丰富的二次开发接口,可以 按照应用系
4、统集成商的要求提供文档转换功能,最大限度地降低了应用系统的成本。3虚拟打印系统的实现基于组件模型的虚拟打印系统主要包括2部分:打印机驱动程序模块和二次开发接口模块。其体系结构如图2所示:打印任务的截取,是整个虚拟打印系统的关键部分。从图1中可以看出,Print Processor负责将打印任务处理后发送到Port Monitor,Print Processor是一个可替换的DLL,安装DDK中的约定,实现以下6个函 数,就可以自定义一个Print Processoro(1)EnumPrintProcessorDatatypes,该函数主要处理并返回打印处理器所能处理的数据类型;ControlP
5、rintProcessor,该函数主要提供方法供用户控制打印处理器,如停止、删除、重新开始打印任 务等;(3)GetPrintProcessorCapabilities,该函数主要供Windows系统获取针对某种输入数据的处理能力;OpenPrintProcessor,返回该打印处理器的句柄给系统;PrintDocumentOnPrintProcessor,处理打印任务,将处理后的数据发送到Port Monitor或者转换为图 像文件等;(6)ClosePrintProcessor,关闭打印处理器。图3详细说明在PrintDocumentOnPrintProcessor中如何将打印任务转换为图
6、像文件的过程。3.2生成指定格式、大小的图像虚拟打印系统获取的打印页面原始数据是EMF矢量图形文件。如果转换前的文档中没有大量的图片信息, 那么转换后的EMF文件是比较小的,一般1页Word转换后在2050 k大小。因此本系统提供了配置接 口供用户选择最终保存的图像格式,目前支持JPG,GIF,PNG等常用的图像格式。可以按照如下方式修 改图像的格式和大小:ImageInfoImageWidth=1024ImageHeight=768ImageType=JPG以上信息设定后,转换生成的图片为JPG格式文件,图片宽为1 024 pixel,高为768 pixel。3.3封装组件,提供二次开发接口
7、二次开发接口是虚拟打印系统提供给第三方应用系统调用或设置的方法。良好丰富的二次开发接口,使得 本系统可以快速便捷的与第三方应用系统进行集成,大大提高系统的应用范围。按照组件模型的思想,本 系统中将二次开发接口封装成ActiveX组件,使得用户可以通过简单的JavaScript调用接口方法。3.3.1安装、卸载打印机接口一般采用由最终用户通过在控制面板中选择添加打印机的方式来安装打印机。这种方法对最终用户要求比 较高,不适合大规模的应用。因此,封装了一个Acitvex实现打印机的安装和卸载,使得第三方应用系统 可以非常方便地安装、卸载虚拟打印机。该ActiveX提供以下2个方法:(l)Insta
8、llVirtualPrint,实现安装打印机,关键部分解释如下:hoc n奖:DRIVEK_INFO_3 Driwcrfnfoai揣加打印甥动茬序JUg= AddRri n inrOri vcr( NUI .3- t & rrLvrl ) ie * *!=*?-Fif CUprnf rinrerVFrinter i. &hp &pd)1 制除JJ印包if (nl3e= DeleccPntiterChp)l 如梁失败,返回出锚代码rcium GeH.asrErrorO i J )3.3.2打印机信息设置接口为了方便第三方系统集成,打印机基本信息存储在系统INI文件中。集成用户按照标准可以非常方便
9、地修 改打印机的相关信息,例如:转换后图像文件的保存路径,当前文件的前缀等。EFblelnfoDiretcufj =寸白1网PrefsK 123 以上信息设定后,转换生成的图像文件就保存在c:123目录下,文件名称按以下规则形成“123_页码”。 第三方系统也可以通过编程的方式动态修改配置文件。3.3.3图像生成事件通知接口在第三方系统集成时,希望实时知道什么时候转换完成,什么时候转换了某一页。因此本系统采用Windows 广播消息的方式来通知集成系统。广播消息是Windows系统中,不同进程之间通信最实时、最快捷的方式。广播消息分为2个步骤:利用RegisterWindowMessage函数
10、向Windows系统注册消息句柄;利用PostMessage函数寄送消息,需要注意的是第一个参数必须为HWND_BROAD-CAST。集成系统可以在 消息循环中获取广播的消息,以VC开发工具为例,如下过程就可以获取广播的消息:利用RegisterWindowMessage注册同一消息句柄;利用ON_REGISTERED_MESSAGE宏,映射消息句柄到 消息处理函数。4结语在研究现有虚拟打印系统的基础上,指出这些系统存在的问题,研究并实现基于组件模型的虚拟打印系统。 该系统具有转换快速、二次开发接口丰富等特点,并且巳经应用在第三方系统中,如:iWebOffice网络文档、iSignatureG
11、DF电子签章系统。定制打印假脱机组件本章解释怎样定制打印机假脱机组件,并提供了以下这些主题:编写打印处理器编写打印监示器编写网络打印提供者8.1编写打印处理器本部分提供下面的主题: 8.1.1对打印处理器的介绍 8.1.2打印处理器示例 8.1.3由打印处理器定义的函数 8.1.4处理一个打印作业 8.1.5安装一个打印处理器8.1.1对打印处理器的介绍打印处理器是用户模式的一些DLL,主要负责转换打印作业的假脱数据到打印机 监示器的格式。也负责处理应用程序对暂停、重新开始及撤消打印作业等的请求。打印作业的假脱数据包含在一个假脱文件中。打印处理器读取这些文件,在数据 流上执行转换操作,并将转换
12、的数据写到假脱机。假脱机然后发送数据流到合适 的打印机监示器。微软Windows 2000包括列在下表中的打印处理器。打印处理器 输入数据类型 输出数据类型winprint.dllEMFRAWTEXTRAWstmpsprt.dllPSCRIPT1RAW关于数据类型的信息,参考下面的主题: EMF数据类型 RAW数据类型 TEXT数据类型 PSCRIPT1数据类型可以创建一个定制的打印处理器以支持一个Windows 2000不支持的数据类型。 也可以提供一个定制的打印处理器以支持一种或更多种的被支持的数据类型,这 样,就允许修改由打印处理器所提供的能力。打印处理器与在打印机驱动程序安装时与打印机
13、的驱动程序相关,因此,可以并 存多个打印处理器支持同一种数据类型。更多的信息,参考安装打印机处理器部 分的内容。EMF数据类型增强型元文件(EMF:Enhanced Metafile)数据类型由调用GDI函数的指令构成。 打印处理器必须调用GDI函数以绘制可打印的图像。GDI函数对打印驱动程序的 打印机图形DLL做调用,它绘制图像并将它作为RAW数据向假脱机发送(通过调 用 EngWritePrinter)。Windows NT/Windows 2000 客户端发送 EMF 数据到 Windows NT/Windows 2000 打印服务器。EMF数据是设备独立并可以比RAW数据类型更快速地发
14、送到服务器。 当一个应用程序请求是从本地到服务器,打印作业也就被假脱处理为EMF数据, 这样就允许在作业被后台假脱机绘制时能够对应用程序的快速返回。更多的关于EMF数据类型的信息,参考Windows 2000专业版资源包(Windows 2000 Professional Resource Kit)或 Windows 2000 服务器版的资源包(Windows 2000 Server Resource Kit)。更多的关于增强型元文件的信息,参考平台SDK文档。RAW数据类型RAW数据可以不用进一步处理就被发送到打印机监示器。打印机处理器只发送这 一数据到假脱机(通过调用WritePrinte
15、r,在平台的SDK文档中描述),有时插 入表格。一个RAW数据文件的实例是一个由PCL命令组成的。无论客户端或服务 器端那一方不支持Windows NT/Windows 2000 EMF或者服务器管理员禁止了 EMF 支持,打印作业以RAW数据格式从客户端发送到服务器端。在这些情况下,客户 端的图像绘制在打印作业发送到服务器端之前进行。(Postscript命令可以被当作RAW数据,如果目标打印机支持Postscript。另一 方面,stmpsprt.dll打印处理器将Postscript的输入向非Postscript的打印 机进行解释,在这种情况下,Postscript不是RAW数据。)更多
16、的关于RAW数据类型的信息,参考Windows NT工作站资源指南或者Windows NT资源指南部分的内容。TEXT数据类型 单纯由ANSI文本构成的。打印机处理器调用GDI以用打印机设备容错字体绘制 字母,并发送RAW格式的结果输出到假脱机(通过调用Writeprinter,在平台的 SDK文档中描述)。处理器等同于用写字板打开输入文件并然后打印文件(该格式 用于不能打印文本字符的打印机)。更多的关于TEXT数据类型的信息,参考Windows NT工作站资源指南或者Windows NT服务器资源指南部分的内容。PSCRIPT1数据类型PSCRIPT1数据的目的是要在一个非Postscrip
17、t打印机上打印的Postscript数 据。打印处理器解释Postscript命令并且向输出文件写RAW格式的结果数据。更多的关于PSCRIPT1数据类型的信息,参考参考Windows NT工作站资源指南或 者Windows NT服务器资源指南部分的内容。8.1.2打印处理器示例genprint.dll的源代码,一个接受EMF数据、RAW数据及TEXT数据作为输入的 打印处理器的实例,包含于本DDK中。其代码位于DDK实例的目录树中的 genprint的子目录中。8.1.3由打印处理器定义的函数打印机处理器必须导出下表列出的函数:函数名称描述ClosePrintProcessor关闭打印处理器
18、ControlPrintProcessor提供对打印文档的控制EnumPrintProcessorDatatypes 枚举打印机处理器支持的数据类型GetPrintProcessorCapabilities为专用的输入数据类型返回打印处理器的能力OpenPrintProcessor为打印打开打印处理器PrintDocumentOnPrintProcessor在一个打印处理器上打印文档8.1.4处理一个打印作业当一个假脱机准备发送一个打印作业到打印处理器时,它调用打印处理器的 OpenPrintProcessor函数。这一函数执行初始化活动并返回一个句柄。假脱机可以调用PrintDocument
19、OnPrintProcessor,它是打印处理器的一个函数, 可以从输入格式到输出格式转换数据流,并返回被转换的流到假脱机。如果输入的格式是Windows NT/Windows 2000的EMF,则 PrintDocumentOnPrintProcessor函数将通过使用GDI的打印处理器函数来控制 EMF记录的回放。这些函数提供了一个打印处理器与打印机驱动程序之间的接口。 该接口允许打印处理器控制打印机页面的物理布局及实现诸如在一个物理页面 上打印多个文档页面(“N-up”打印)、反向打印、每页打印多个拷贝等等。一个打印处理器的输出数据流必须返回到假脱机。通常,如果数据转换需要与打 印机驱动
20、程序的打印机图形DLL(对EMF格式作为输入数据时)之间交互作用,则 图形DLL通过调用EngWritePrinter。另外一方面,如果转换不调用打印机图形 DLL(当输入数据是RAW类型时),则打印处理器调用WritePrinter(在平台的SDK 文档中描述)。PrintDocumentOnPrintProcessor函数可以从假脱机到打印处理器的 ControlPrintProcessor函数同步调用中断。这一函数实现应用程序的暂停、恢 复及撤消一个打印作业等能力。在PrintDocumentOnPrintProcessor结束转换数据流并返回后,假脱机调用打印 机处理器的ClosePr
21、intProcessor函数。8.1.4.1为打印处理器使用GDI函数一套用户模式的GDI函数被gdi32.dll导出,对被打印处理器用于处理WindowsNT/Windows 2000的EMF作为输入格式。下面的表列出了可以提供的函数:函数名称描述GdiDeleteSpoolFileHandle释放一个假脱机文件句柄GdiEndDocEMF对一个打印文档完成EMF回放操作GdiEndPageEMF为一个物理页面完成EMF回放操作,并从打印机跳页GdiGetDC返回一个打印机设备设备环境的句柄GdiGetDevmodeForPage返回一个文档页面的DEVMODE结构GdiGetPageCou
22、nt返回文档页面的数字GdiGetPageHandle返回文档页面的句柄GdiGetSpoolFileHandle返回一个假脱文件的句柄,它对其他的GDI函数是作为一个必需的输入GdiPlaypageEMF播放与文档页面相关的EMF记录GdiResetDCEMF重置打印机的设备设备环境GdiStartDocEMF对打印作业执行初始化操作GdiStartPageEMF对物理页面执行初始化操作 一个EMF打印处理器的PrintDocumentOnPrintProcessor应当调用GdiGetSpoolFileHandle以获得假脱文件的句柄及调用GdiGetDC以获得打印机 设备设备环境句柄。然
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 打印 程序 开发 资料

链接地址:https://www.31ppt.com/p-5302100.html