EMF 打印机假脱机文件查看器






4.72/5 (30投票s)
EMF 格式假脱机文件的查看器应用程序。
什么是 EMF 假脱机文件?
当应用程序将页面发送到打印机时,这些页面会保存在一个中间文件中,应用程序可以写入该文件,而打印机驱动程序可以同时读取该文件。这加快了打印过程,因为在打印机完成打印文档之前,控制权就可以返回到应用程序。
通常,此假脱机文件以原始打印机页面定义语言(可以是 PCL、PostScript 或许多其他选项之一)的形式保存,但在 Windows NT、2000、XP 和 2003 中,可以将假脱机程序设置为使用一种不同的、更独立于设备的格式,称为 EMF 假脱机文件。
EMF 假脱机文件的文件布局并未得到微软的官方文档说明,但新发布的文档显示,它是一系列增强型图元文件记录(每页一条)以及一些其他与打印这些页面相关的特定记录类型。
EMF 假脱机文件记录类型
假脱机文件由以下记录类型组成:
Private Enum SpoolerRecordTypes
SRT_EOF = &H0 ' // int32 zero
SRT_RESERVED_1 = &H1 '* 1 */
SRT_FONTDATA = &H2 ' 2 Font Data */
SRT_DEVMODE = &H3 ' 3 DevMode */
SRT_FONT2 = &H4 '4 Font Data */
SRT_RESERVED_5 = &H5 ' 5 */
SRT_FONT_MM = &H6 ' 6 Font Data (Multiple Master) */
SRT_FONT_SUB1 = &H7 ' 7 Font Data (SubsetFont 1) */
SRT_FONT_SUB2 = &H8 ' 8 Font Data (SubsetFont 2)
SRT_RESERVED_9 = &H9
SRT_UNKNOWN = &H10 ' // int unknown...
SRT_RESERVED_A = &HA
SRT_RESERVED_B = &HB
SRT_PAGE = &HC ' 12 Enhanced Meta File (EMF) */
SRT_EOPAGE1 = &HD ' 13 EndOfPage */
SRT_EOPAGE2 = &HE ' 14 EndOfPage */
SRT_EXT_FONT = &HF ' 15 Ext Font Data */
SRT_EXT_FONT2 = &H10 ' 16 Ext Font Data */
SRT_EXT_FONT_MM = &H11 ' 17 Ext Font Data (Multiple Master)
SRT_EXT_FONT_SUB1 = &H12 ' 18 Ext Font Data (SubsetFont 1) */
SRT_EXT_FONT_SUB2 = &H13 '* 19 Ext Font Data (SubsetFont 2) */
SRT_EXT_PAGE = &H14 ' 20 Enhanced Meta File?
End Enum
其中,最重要的记录类型是:
SRT_PAGE
此记录包含一个标准的 Windows 增强型图元文件,由一个 EMF 头和一或多个 EMF 图形记录结构组成。EMF 头记录提供了边界矩形(打印页边距内的区域)的尺寸、构成页面的图形记录数量以及此单个 EMF 页面的文件大小。
SRT_DEVMODE
此记录包含适用于文档中其余页面(或直到遇到另一个覆盖它的 DEVMODE
记录)的设备设置。DEVMODE
结构保存了诸如份数、页面方向(横向与纵向)、纸张尺寸和纸张来源等详细信息。
SRT_EOF
这表示假脱机文件记录的结束。
使用 EMF 假脱机文件查看器
要查看 EMF 假脱机文件,请选择菜单“文件”->“打开”。将出现一个对话框,允许您浏览到假脱机文件(扩展名为 .spl)。这些文件通常保存在 $winnt$\System32\spool\ 目录中。(在此应用程序代码中我也包含了一些示例。)
该查看器允许您跳转到特定页面,放大和缩小,甚至使用以下菜单选项打印假脱机文件:
- 文件
- 打开 - 弹出对话框以查找和打开 EMF 假脱机文件
- 打印 - 允许您重新打印当前打开的 EMF 假脱机文件
- 属性 - 弹出对话框,列出打印文件的属性
- 退出 - 退出应用程序
- 页数
- 第一页 - 转到文档的开头
- 上一页 - 回退一页
- 下一页 - 转到下一页
- 最后一页 - 转到文档的末尾
- 跳转到 - 直接转到选定的页面
- 属性 = 弹出对话框,显示此页面的属性
- 视图
- 放大 放大预览
- 缩小 减小预览大小
EMF 假脱机文件的用途
由于几乎所有应用程序都有打印功能,因此 EMF 假脱机文件可以作为一种快速简便的可移植文档格式(尽管功能远不如 PDF)。因此,如果您有一个应用程序,并且想将文件发送给一个没有该应用程序来查看的人,您只需使用该应用程序的打印功能并将假脱机文件发送给他们即可。
此外,了解假脱机文件的结构意味着可以解析文件以从中提取信息。您可能只想为存档目的提取打印文档中的文本,您可以通过解析文件并提取 EMR_EXTTEXTOUTA
和 EMR_EXTTEXTOUTW
记录来做到这一点。
致谢
此应用程序中的源代码在很大程度上借鉴了 Feng Yuan 和 Christophe Lindemann 的工作,以及各个论坛和新闻组上的许多其他人的贡献。
本文部分内容基于 www.undocprint.org/formats/winspool/spl。这些部分受 GNU 自由文档许可证的约束,版权归 © 2003-2005 Free Software Foundation, Inc. 所有。
历史
- 2006 年 8 月 21 日:代码已更新至 .NET 2.0,页面导航已改进