65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.72/5 (30投票s)

2005年6月3日

CPOL

3分钟阅读

viewsIcon

859274

downloadIcon

25586

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_EXTTEXTOUTAEMR_EXTTEXTOUTW 记录来做到这一点。

致谢

此应用程序中的源代码在很大程度上借鉴了 Feng Yuan 和 Christophe Lindemann 的工作,以及各个论坛和新闻组上的许多其他人的贡献。

本文部分内容基于 www.undocprint.org/formats/winspool/spl。这些部分受 GNU 自由文档许可证的约束,版权归 © 2003-2005 Free Software Foundation, Inc. 所有。

历史

  • 2006 年 8 月 21 日:代码已更新至 .NET 2.0,页面导航已改进
EMF 打印机假脱机文件查看器 - CodeProject - 代码之家
© . All rights reserved.