适用于 Windows Vista 的仅限根级别的新 GPD 属性

重要

新式打印平台是 Windows 与打印机通信的首选方式。 建议使用 Microsoft 的 IPP 收件箱类驱动程序以及打印支持应用 (PSA) 来自定义 Windows 10 和 11 中的打印体验,以便进行打印机设备开发。

有关详细信息,请参阅新式打印平台打印支持应用设计指南

以下列表描述了从 Windows Vista 开始的新 GPD 属性。 若要保持与 Windows Vista 之前的 Windows 版本的向后兼容性,应使用以下代码将这些属性括起来。

*Ifdef: WINNT_60 ... *Endif: WINNT_60 blocks

PrintProcDuplexOptions

PrintProcDuplexOptions 属性控制打印处理器中的各种双工选项。 此属性可以具有以下值之一:

1:在反向双工模式下反转页面

2:如果可能,禁止生成额外的空白页

3:以上两者

0:以上都不是

如果 PrintProcDuplexOptions 为 1,则它控制打印处理器是否应在反向双工模式下反转页面。

假设必须打印 n-up = 1 的四页文档,并且想要使用反向打印和双面打印。 由于需要反向打印,因此需要在打印第一页之前打印最后一页。 由于需要双面打印,因此需要在一张纸上打印两页。 打印处理器可以按以下两种格式之一播放页面(其中每对数字表示将在单张纸的两面打印的两页):

  • 格式 1:(4,3),(2,1)

  • 格式 2:(3,4),(1,2)

在 Windows Vista 之前,打印处理器将以格式 2 [(3,4),(1,2)] 打印订单。 但在 Windows Vista 及更高版本中,默认格式为格式 1 [(4,3),(2,1)]。 发生此更改是因为许多打印机的格式 2 输出不正确;也就是说,打印的页面没有按正确的顺序排列。

但是如果打印机在格式 1 下工作正常,则不需要为 Windows Vista 及更高版本更改任何内容。 但是,如果打印机在格式 1 下工作不正常,并且你想恢复到格式 2,请将以下代码示例添加到 GPD 文件中。

*Ifdef: WINNT_60
*PrintProcDuplexOptions: 1
*Endif: WINNT_60

格式 1 在某些方向或输入和输出托盘的某种组合中可能效果更好,而格式 2 在其他组合中可能更好。 因此,可以将 PrintProcDuplexOptions 属性放入 switch/case 构造中。

对于 Windows Vista 之前的 Unidrv 驱动程序,如果你有 Windows Vista 之前版本的打印处理器,则格式 2 是默认格式,并且你无法更改格式;否则,如果你有 Windows Vista 打印处理器,则格式 1 是默认格式,并且你无法更改格式。

对于 Windows Vista Unidrv 驱动程序,如果你有 Windows Vista 之前的打印处理器,则格式 2 是默认格式,并且 GPD 属性将被忽略;否则,如果你有 Windows Vista 打印处理器,则格式 1 是默认格式,但你可以使用 PrintProcDuplexOptions 属性更改格式。

如果 PrintProcDuplexOptions 为 2,则将在某些双面打印方案中抑制空白页的生成。

此属性控制在执行双面打印时是否应向打印机发送额外的空白页。 例如,如果作业是单页作业,并且双面打印已打开(假设 n-up = 1),则只需要打印纸张的一面。 目前,打印机将打印一面,然后在反面生成空白页。 (由于打印作业是在双面 = 打开的情况下启动的,因此打印机在弹出纸张之前需要两页。如果第二页没有打印,一些打印机会一直等待。)当前解决方案的缺点是:

  • 生成的页面会导致会计软件中的页面计数和打印机中的页面计数器的页计数不准确。

  • 当页面从打印机中取出一半时(在某些 Hewlett-Packard DeskJet 风格的打印机中),用户可能会尝试将其拉出,而打印机则试图将其拉回。 这种情况可能会导致硬件问题。

可以通过在 GPD 文件中指定 *PrintProcDuplexOptions: 2 来避免上述问题。

请注意,即使设置了此属性,也仅在以下有限情况下执行空白页优化:

  1. 对于反向打印,只有当整个作业可以放在纸张的单面上时,才会执行空白页优化(例如,n-up=1 的单页作业或 n-up=4 的四页作业)。 如果作业需要多张纸,则不会执行优化(因为打印机页面将以不准确的顺序打印)。 例如,对于三页作业,页面可以按 3,2,1,<空白>的顺序打印,而不是 4,3,2,<空白>。

  2. 如果打印处理器必须模拟副本,则不执行空白页优化。 如果所需的副本数量超过打印处理器可以制作的副本数量,则打印处理器会模拟副本。

    以下情况是发生模拟并生成空白页(如果需要)的示例:

    • 无法复印的打印机需要两份复印件

    以下情况是不发生模拟的示例,你可以抑制额外的页面生成:

    • 无法复印的打印机的单份复印作业
    • 一台可以打印多份的打印机的五份复印作业

PrintProcDuplexOptions 的用法

*Ifdef: WINNT_60
*PrintProcDuplexOptions: 2
*Endif: WINNT_60 

在某些情况下,你可能不介意额外的页面打印,而在其他情况下你会介意。 因此,可以将 PrintProcDuplexOptions 属性放入 switch/case 构造中。

对于 Windows Vista 之前的 Unidrv 驱动程序,如果你有 Windows Vista 之前版本的打印处理器,打印机将在必要时打印额外的空白页,并且你无法更改此行为;否则,如果你有 Windows Vista 打印处理器,打印机将在必要时打印额外的空白页,并且你无法更改此行为。

对于 Windows Vista Unidrv 驱动程序,如果你有 Windows Vista 之前的打印处理器,打印机将在必要时打印额外的空白页,并且 GPD 属性将被忽略;否则,如果你有 Windows Vista 打印处理器,并且存在适当的 GPD 属性和适当的条件(即前面描述的防止空白页打印的条件),打印机将不会打印空白页。

PreAnalysisOptions

PreAnalysisOptions 属性可以包含下列其中一个值:

0:禁用所有预分析模式。

1:默认模式。 启用单色 z 顺序文本分析和空白带优化。 此模式适用于具有可下载字体或设备字体支持以及高分辨率(600dpi 或更高)、24bpp 渲染模式的设备。

2:为 24 bpp ImageProcessing 回调函数启用 1 bpp 优化。

4:启用设备 StretchBlt 支持。

8:启用供应商预分析模式。

16:在调用 ImageProcessing 回调函数之前,为 1 bpp 启用调试模式,其中带转换为 24 bpp。

UseBMPFontCompression?

UseBMPFontCompression? 属性控制 Unidrv 在以位图形式下载字体时是否压缩数据。 UseBMPFontCompression? 的默认值为 FALSE,这意味着,如果 GPD 文件中不存在此属性,Unidrv 将不会压缩。 此默认值保持与没有位图字体压缩功能的旧版本 Unidrv 的兼容性。 仅当打印机支持位图字体压缩时,才应将此属性设置为 TRUE。压缩的位图字符数据采用压缩的 run-length-with-line-repetition 格式。

UseMode5Compression?

UseMode5Compression? 属性控制 UniDrv 是否应使用模式 5 压缩。 模式 5(或方法 5)压缩是一种自适应压缩,可以组合使用多种其他压缩方法(如Unncoded、TIFF 或 Delta Row)。 UseMode5Compression? 的默认值为 FALSE,这意味着,如果 GPD 中不存在此属性,Unidrv 将不会执行自适应压缩。 此默认值保持与没有自适应压缩功能的旧版本 Unidrv 的兼容性。 仅当打印机支持自适应压缩时,才应将此属性设置为 TRUE

UseHPGLPolylineEncoding?

UseHPGLPolylineEncoding? 属性控制 Unidrv 是否应使用折线编码。 HP-GL/2 支持绘图矢量的 Pen Up/Pen Down/Draw Absolute/Draw Relative 命令。 折线编码的 (PE) 命令是表示矢量的更高效方法。

UseHPGLPolylineEncoding? 的默认值为 FALSE,这意味着如果 GPD 中不存在此属性,Unidrv 将不会使用 PE 命令。 此默认值保持与不支持 PE 命令的旧版本 Unidrv 的兼容性。 仅当打印机支持折线编码时,才应将此值设置为 TRUE

PrintSchemaPrivateNamespaceURI

PrintSchemaPrivateNamespaceURI 属性定义核心驱动程序应用于在 PrintTicket 或 PrintCapabilities 中公开专用 PPD 功能或选项的专用命名空间 URI。 该属性必须出现在 GPD 文档的根目录中,并包含 URI 的 ASCII 表示形式,该 URI 将用于在 PrintTickets 和 PrintCapabilities 文档中定义命名空间。 反过来,该 URI 将与所有没有显式映射到公共架构或核心驱动程序无法识别的功能和选项相关联。

PrintSchemaKeywordMap

PrintSchemaKeywordMap 属性显示在 GPD 文件中的功能和选项构造下。 此属性指示你应将哪个公共打印架构名称与打印机定义的功能一起使用。 可以使用 PrintSchemaKeywordMap 属性重命名 PrintTicket 中 GPD 文件中指定的任何选项,但 Duplex 和 Collate 除外。

对于明确识别的功能(包括页面大小和颜色),GPD 分析程序会忽略此属性。

应该使用双引号将所有值引起来。 它们将使用 GPD 中指定的代码页(如果有)转换为 Unicode。 任何属性的重复定义的解析方式与其他 GPD 属性相同:读取的最后一个定义具有优先权。

如果将功能映射到 GPD 文件中已使用的打印架构关键字,则相应的 PrintCapabilities 文档可能会多次列出该功能。 多次出现可能会造成混淆,因此不应将功能映射到 GPD 文件中使用的打印架构关键字。

GPD 分析程序会自动为 InputBin 功能生成 FORMSOURCE 选项,并将其映射到打印架构中的 AutoSelect 关键字。 如果 GPD 文件包含一个 InputBin 选项,该选项使用 PrintSchemaKeywordMap 属性将选项映射到打印架构关键字,则打印架构中的功能将在设备命名空间中包含 FORMSOURCE 选项。 AutoSelect 将显示在 PrintCapabilities 文档中,并引用在 GPD 文件的 PrintSchemaKeywordMap 属性中指定的选项。

以下代码示例显示了一个部分 GPD 文件来显示布局。

*Feature: HPSTAPLER
{
    *Name: "Staple"
    *DefaultOption: Off
    * PrintSchemaKeywordMap: "Staple"

    *Option: Off
    {
        *Name: "Off"
        * PrintSchemaKeywordMap: "Off"
    }
 
    *Option: On
    {
        *Name: "On"
        * PrintSchemaKeywordMap: "On"
    }
}

IsXPSDriver

IsXPSDriver 属性使用以下 GPD 语法。

*IsXPSDriver?: TRUE | FALSE

可以将 Windows Vista Unidrv 配置模块 (Unidrvui.dll) 用于 Microsoft Win32 GDI 驱动程序和新的 XPSDrv 驱动程序。 若要对 XPSDrv 驱动程序使用 Unidrv 配置模块,XPSDrv 驱动程序的 GPD 数据文件必须指定 IsXPSDriver 属性,并将其值设置为 TRUE

例如,如果你有 XPS 驱动程序,请使用以下代码。

*IsXPSDriver?: TRUE

要为 Win32 GDI 驱动程序使用 Unidrv 配置模块,则不需要指定此属性。

UseImageForHatchBrush?

UseImageForHatchBrush? 属性使用以下 GPD 语法。

*Ifdef: WINNT_60
*UseImageForHatchBrush?: TRUE
*Endif: WINNT_60 

在 Microsoft Windows Server 2003 或 Windows XP 中,当 Unidrv 以 HP-GL/2 模式打印时,如果在 DrvRealizeBrush 函数中收到阴影画笔,Unidrv 会发送命令,以便打印机选择适当的阴影画笔。 Unidrv 不控制阴影画笔的呈现方式。 例如,线条之间的间距通常由分辨率控制。 分辨率越高,间距越小;分辨率越低,间距越大。 因此,如果使用不同的分辨率,文档可能会以不同的方式打印。

在 Windows Vista 中,如果 GPD 指定 UseImageForHatchBrush? 属性,Unidrv 会将阴影画笔渲染到位图图面上,然后将该位图发送到设备。 因此,Unidrv 可以控制阴影画笔的渲染方式。

ReverseBandOrder?

ReverseBandOrder? 属性使用以下 GPD 语法。

*Ifdef: WINNT_60
*ReverseBandOrder?: TRUE
*Endif: WINNT_60 

ReverseBandOrder? 的值为 TRUEFALSE,用于指示是否启用反向条带。 此属性会导致按相反顺序进行条带。 例如,对于纵向页面,条带从下到上而不是从上到下进行的。

此属性与 ReverseBandOrderForEvenPages? 基本相同,除了 ReverseBandOrder?,即使双工未处于活动状态,它也会被考虑(ReverseBandOrderForEvenPages? 仅在双工打开时有效),并且它适用于所有页面(ReverseBandOrderForEvenPages? 仅在偶数页面上有效)。 有关如何使用 ReverseBandOrder? 和其他相关信息的详细信息,请参阅 *ReverseBandOrderForEvenPages?。 特别请注意,插件必须反转扫描行和扫描行中的位。

可以组合使用 *ReverseBandOrderForEvenPages? 和 *ReverseBandOrder?

如果仅 ReverseBandOrder? 设置为 TRUE,所有页面的条带将反转。

如果只有 ReverseBandOrderForEvenPages? 设置为 TRUE,则如果打印机是双面打印,则仅对偶数页反转条带。 如果未设置双工,则会忽略 ReverseBandOrderForEvenPages? 设置。

如果同时设置了 ReverseBandOrder?ReverseBandOrderForEvenPages?,将发生以下情况:

  • 如果双工为打开,则对奇数页执行反向条带(即 1、3、5、7 等)。

  • 如果双工为关闭,则对所有页面执行反向条带。

BidiQueryFile

BidiQueryFile 属性使用以下 GPD 语法。

*BidiQueryFile: <GPD or GDL file name>

使用 BidiQueryFile 指定包含打印机驱动程序的自动配置 BidiQueryBidiResponse 数据的 GPD 或 GDL 文件名。 GPD 或 GDL 文件名不应指定任何路径。 如果自动配置数据包含在驱动程序的 DataFile GPD 文件中,还可以将 GPD 文件指定为 BidiQueryFile 属性的值。

以下代码示例显示了部分 GPD 文件中此属性的示例。

*Ifdef: WINNT_60
*BidiQueryFile: "ACnfgUni.GDL"
*Endif: WINNT_60