转帖 如何将SPL to EMF.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
转帖 如何将SPL to EMF

?????????????关键字: 打印 SPL EMF 文件格式 ?? 所有后打印作业完成,有几个 SPL、 SHD 和 TMP 留下 C:\Winnt\System32\Spool\Printers 目录中的文件。SPL 文件是实际的后台打印 (打印作业) 文件。 TMP 文件是通常与 LPR 打印作业相关联。 SHD 文件提供有关哪台打印机打印作业发送到或从其打印作业一起提供的信息。 一个 SHD 文件是一个阴影文件,用于跟踪的哪些逻辑打印机 (同一编号) xxxxx.spl 文件转到。 它还包含在的队列发送到该的打印机和其他信息的文件的用户中的文件的顺序。 除非否则状态逻辑打印机设置,通常会删除这些文件。 ???????????? 问题: ???????????? Windows的假脱机打印会在Windows\System32\spool\PRINERS目录下生成.spl和.shd文件,其中的打印内 容存贮在.spl文件中,但是.spl文件格式似乎未公开,那么如何才能将未知的.spl文件剥离成.emf文件呢? ????????????? 首先,让我们了解一下Windows打印机制: ????????????? 这是微软的官网的一副打印流程图片: ?????????????? ????????????? 其中ISV是应用软件接口,IHV是硬件接口,左边是XP的打印模型,右边是Vista最新的XPS打印模 型,但两者可以互相转换,具有良好的兼容性。不过,这里暂时只关心XP系统的打印过程。 ???????????? 网络打印过程图: ?????????????? ????????????? ???????????? ???????????? 但是这些图似乎还不够详细,那么请看下面一副:(摘录于论文:《基于关键字匹配的打印数据截获 系统》): ????????????? ??????????????? 基本的思路是: 打印过程发生时,GDI模块和打印驱动(由打印机厂商提供)进行基本的数据交换,在假 脱机设置环境下,生成打印机命令文件:.spl或.emf文件,作为一个打印池的作业,然后Windows后台打印线 程处理打印作业,将数据文件送至打印机打印,打印完删除该打印文件。 ??????????????? 好,现在回到正题:.spl文件该如何剥离成.emf呢?看一个例子: ??????????????? 在WinHex中打开一个.spl文件: ??????????????? ?????????????? 参考:? /formats/winspool/spl?中一些打印结构的定义。 ????????????? 首先,.spl文件都是以0名开头,然后一个DWORD 是emf相关区的文件偏移,第3个 DWORD是文档描述字符串(UNICODE)的文件偏移,第4个DWORD 描述的是端口说明字符串(UNICODE)。大 致结构如下: ?????????????? ??????????? 文件尾就是这个样子: ???? ??????????? ?????????? 当定位到0x50的文件位置,读取2个DWORD数据之后,就是.emf文件开始了。.emf文件格式是公开的,而 且非常简单,是一系列EMR_XXX开口结构的紧密排列,通常以EMR_HEADER(0x01)开头,以EMR_EOF (0x0E)结尾。其实我们根本没有必要去解析.emf文件格式,Windows? SDK有专门显示.emf文件的API,3个函数就 搞定: ????????????????????? HENHMETAFILE hEMF = GetEnhMetaFile(EMF_DumpOK.emf); ????????????????????? PlayEnhMetaFile (dc.m_hDC, hEMF, rc) ;?? ????????????????????? DeleteEnhMetaFile (hEMF) ; 然后.spl文件还有一些东西,我现在还没有解析出来,但是.emf文件已经剥离出来了,后面的可以先不理它。 ????????????????? 然后,开始写程序喽,因为比较简单,所以代码有点随便哦~~:) ???????????????? ????????????????? /rawdata/?星绽紫辉 ????????????????? 程序截图如下: ?? ????????????????? ??1 ??2 ??3#include?windows.h ??4#include?winspool.h ??5#include?stdio.h ??6#in

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档