驱动程序功能

重要

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

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

驱动程序功能是由驱动程序合成的非 PDP 功能(例如,%OutputFormat 功能)。 为避免与 PPD 功能关键字名称冲突,所有驱动程序功能关键字名称前都有一个“%”字符。 驱动程序功能/选项关键字也会区分大小写。

要获取驱动程序支持的所有驱动程序功能关键字的列表,插件可以调用 EnumFeatures,它将返回包含驱动程序功能和 PPD 功能的功能关键字列表。 然后,该插件可以搜索以“%”前缀开头的功能关键字名称,以便获取驱动程序功能列表。

下表列出了当前支持的驱动程序功能。 表中每一行都列出了一个驱动程序功能关键字,显示了支持的选项,说明了是否可以通过调用 EnumOptions 来枚举该功能的选项,并且还提供了简要说明。

驱动程序功能 支持的选项 枚举选项 说明和注释
%AddEuro “True”

“False”
将欧元符号添加到设备字体。

此功能仅支持级别 2 以上的打印机。 对于级别 1 打印机,SetOptions 会忽略此功能,而 GetOptions 则会始终返回“False”。
%CtrlDAfter “True”

“False”
在每次作业之后发送 Ctrl-D。

打印机粘滞
%CtrlDBefore “True”

“False”
在每次作业之前发送 Ctrl-D。

打印机粘滞
%CustomPageSize 有关详细信息,请参阅下面的注释 1。 指定 PostScript 自定义页面大小参数。

文档粘滞
%GraphicsTrueGray “True”

“False”
将灰色图形转换为 PostScript 灰色。

打印机粘滞
%JobTimeout 以 NULL 结尾的 ANSI 字符串,包含表示超时的无符号整数秒数的十进制数字字符,范围为 0 至 2,147,483,647 秒。

对于 SetOptions,允许在十进制数字前后使用额外的制表符或空格字符,但不允许使用正负符号。
指定作业超时值。

打印机粘滞
%MaxFontSizeAsBitmap 一个以 NULL 结尾的 ANSI 字符串,包含表示像素的无符号整数的十进制数字字符,范围为 0 到 32,767 之间。

对于 SetOptions,允许在十进制数字前后使用额外的制表符或空格字符,但不允许使用正负符号。
指定要下载为位图的最大字号。

打印机粘滞
%MetafileSpooling “True”

“False”
启用/禁用高级打印功能。

文档粘滞

有关详细信息,请参阅下面的注释 2。
%MinFontSizeAsOutline 一个以 NULL 结尾的 ANSI 字符串,包含表示像素的无符号整数的十进制数字字符,范围为 0 到 32,767 之间。

对于 SetOptions,允许在十进制数字前后使用额外的制表符或空格字符,但不允许使用正负符号。
指定以大纲形式下载的最小字号。

打印机粘滞
%Mirroring “True”

“False”
通过反转水平坐标来镜像输出。

文档粘滞
%Negative “True”

“False”
通过反转黑白值来产生负输出。 此功能仅支持黑白打印机。 对于彩色打印机,SetOptions 会忽略此功能,而 GetOptions 则会始终返回“False”。

文档粘滞
%Orientation "Portrait"、"Landscape"、"RotatedLandscape" 指定输出方向。

文档粘滞
%OutputFormat "Speed"、"Portability"、"EPS"、"Archive" 指定 PostScript 输出格式。

文档粘滞

有关详细信息,请参阅下面的注释 5。
%OutputProtocol "ASCII"、"BCP"、"TBCP"、"Binary" 指定打印机的打印作业将使用的协议。 假定 PostScript 打印机支持“ASCII”和“二进制”,因此这些选项都始终可用。 “BCP”和”TBCP"选项只有在支持的情况下方可使用。 要确定这一点,请检查全局属性“协议”。

打印机粘滞
%OutputPSLevel "1"、"2"、"3" 指定打印作业要使用的 PostScript 语言级别。 该设置永远不会大于“LanguageLevel”全局属性中所指定的值。

文档粘滞
%PageOrder "FrontToBack"

"BackToFront"
指定页面将进行打印的顺序。

文档粘滞

有关详细信息,请参阅下面的注释 3。
%PagePerSheet "1"、"2"、"4"、"6"、

"9"、"16"、"Booklet"
指定每个物理纸张的逻辑页数。 此功能也被称为“N-up”打印。

文档粘滞

有关详细信息,请参阅下面的注释 4。
%PSErrorHandler “True”

“False”
发送 PostScript 错误处理程序。

文档粘滞
%PSMemory 一个以 NULL 结尾的 ANSI 字符串,包含表示 PostScript 内存的无符号整数千字节数的十进制数字字符,范围为 0 至 2,147,483,647 字节。

对于 SetOptions,允许在十进制数字前后使用额外的制表符或空格字符,但不允许使用正负符号。
指定可用的 PostScript 虚拟内存量。

核心驱动程序需要一定量的可用 PostScript 虚拟内存进行其处理。 如果 %PSMemory 设置为低于该最小值,则使用最小值作为新值。 目前,级别 1 打印机的最小值为 172 KB,级别 2 以上打印机的最小值为 249 KB。

打印机粘滞
%TextTrueGray “True”

“False”
将灰色文本转换为 PostScript 灰色。

打印机粘滞
%TTDownloadFormat "Automatic"、"Outline"、"Bitmap"、"NativeTrueType" 指定 TrueType 字体下载格式。 只有当“TTRasterizer”全局属性显示支持“Type42”时,才会支持“NativeTrueType”。

文档粘滞
%WaitTimeout 以 NULL 结尾的 ANSI 字符串,包含表示超时的无符号整数秒数的十进制数字字符,范围为 0 至 2,147,483,647 秒。

对于 SetOptions,允许在十进制数字前后使用额外的制表符或空格字符,但不允许使用正负符号。
指定等待超时值。

打印机粘滞

关于驱动程序功能关键词的说明

  1. %CustomPageSize 驱动程序功能包含五个选项值:x、y、WidthOffset、HeightOffset 和 FeedDirection。 有关这些参数的详细说明,请参阅 PostScript 打印机说明文件格式规范版本 4.3 的第 5.16 节。

    %CustomPageSize 条目包含 %CustomPageSize 关键字,以及 x、y、WidthOffset、HeightOffset 和 FeedDirection 选项的值。 第一项是 %CustomPageSize 关键字,后面是一个 NULL 字符。 x、y、WidthOffset 和 HeightOffset 的值跟随该关键字,以无符号十进制数字的子字符串形式出现,其中每个数字代表相应选项值的 PostScript 点数。 每个数值后面都有一个或多个空格或制表符。 字符串中的最后一项是 FeedDirection 的值,它以一个 NULL 字符结束。 FeedDirection 的选项包括“LongEdge”、“ShortEdge”(对应于方向 0 和 1)以及“LongEdgeFlip”、“ShortEdgeFlip”(对应于方向 2 和 3)。 查看 *LeadingEdge PPD 功能关键字,了解支持的送纸方向。

    对于 GetOptionspmszFeatureOptionBuf 指向的输出缓冲区如上一个段落所述。 在下例中,x 的值为 612,y 的值为 792,WidthOffset 和 HeightOffset 的值均为 0,FeedDirection 的值为“ShortEdge”。

    "%CustomPageSize\0612 792 0 0 ShortEdge\0"
    

    对于 SetOptions,允许在十进制数字前后使用额外的制表符或空格字符,但不允许使用正负符号。 否则,pmszFeatureOptionBuf 指向的输入缓冲区应按上述方法来构建。

  2. 只有满足以下三个条件,方可支持 %CustomPageSize 驱动程序功能:

    1. PPD 文件包含 *CustomPageSize 功能。

    2. *PPD-Adobe 关键字的值大于或等于 4.3,或者指定 *UseHWMargin: False 以表示辊式进纸设备。

    3. *PageSize PPD 功能当前选择的选项是 CustomPageSize。

  3. 只有在启用了后台处理程序 EMF 后台处理程序时才支持此功能。

    如果支持,将此功能选项设置为“False”会导致以下 EMF 相关功能发生变化:

    1. 如果 %PagePerSheet 为“Booklet”,则其会更改为“1”。

    2. 如果“逐份打印”被设置为“True”(可直接在 DEVMODEW 结构的公共部分中设置,或通过对 *Collate PPD 功能调用 SetOptions 来进行设置),但“逐份打印”功能当前不可用,则“逐份打印”将被设置为 “False”。

    3. 如果 %PageOrder 与打印机当前输出顺序设置相反,则 %PageOrder 将反转为打印机的值。

  4. 只有在启用了后台处理程序 EMF 后台处理程序时才支持此功能。

    在支持该功能的情况下,设置该功能可能会导致以下情况:

    1. 如果打印机的 PPD 文件包含 *OutputOrder 功能关键字,则会更改其选项选择,以便与 %PageOrder 功能新设置的输出顺序匹配。 之所以这样做,是为了防止后台处理程序执行不必要的页面顺序模拟。

    2. 如果打印机的 PPD 文件没有包含 *OutputOrder 功能,并且 %PageOrder 驱动程序功能的新设置与打印机的当前输出顺序设置相反,而 %MetafileSpooling 驱动程序功能为“False”,那么 %MetafileSpooling 将被重置为“True”。

  5. 只有当启用了后台处理程序 EMF 后台处理功能且“双工”功能可用时,才能支持“Booklet”选项。

    支持“Booklet”选项时,将 %PagePerSheet 驱动程序功能设置为“Booklet”会导致以下更改:

    1. 如果 %MetafileSpooling 驱动程序功能为“False”,则它会被重置为“True”。

    2. 如果 *Duplex PPD 功能设置为“无”,则 *Duplex 功能将被重置为 PPD 文件中定义的第一个非单工选项。

  6. 除“EPS”(封装 PostScript)外,%OutputFormat 驱动程序功能中指定的格式会根据以下两个特征进行分类:

    1. 输出 PostScript 代码是否与页面顺序无关?

    2. 输出 PostScript 代码是否包含设备控制命令(通常使用 setpagedevice 操作符)?

      类别 与页面顺序无关 setpagedevice
      存档
      便携性
      速度

在对驱动程序功能关键字调用 GetOptions 时,如果请求的功能关键字未被识别,或者功能关键字被识别但在当前文档粘滞打印机粘滞模式下不受支持(请参阅替换驱动程序提供的属性页),则该功能将被忽略,并且输出缓冲区将不包含其功能/选项关键字对。

例如,假设调用了 GetOptions 方法,而 pmszFeaturesRequested输入缓冲区内包含以下字符串(MULTI_SZ 格式):

"Resolution\0%CustomPageSize\0Unknown_Name\0%Orientation\0\0"

GetOption 返回后,pmszFeatureOptionBuf 输出缓冲区可能会包含此字符串(同样为 MULTI_SZ 格式):

"Resolution\0300dpi\0%CustomPageSize\0612 792 0 0 ShortEdge\0%Orientation\0RotatedLandscape\0\0"

请注意,第一个字符串中列出的 Unknown_Name 功能(并不存在)并没有出现在第二个字符串中,这是因为它无法被 Pscript 驱动程序识别。 其他功能,分辨率、%CustomPageSize%Orientation,以及它们的当前选项(分别为“300dpi”、“612 792 0 0 ShortEdge”和“RotatedLandscape”)都会出现在输出字符串中。 有关 %CustomPageSize 选项的说明,请参阅驱动程序功能。

在对驱动程序功能关键字调用 SetOptions 时,如果 pmszFeatureOptionBuf 指向的输入缓冲区中请求的功能关键字或其选项关键字未被识别,或者该功能被识别但在当前文档粘滞或打印机粘滞模式下不受支持(请参阅替换驱动程序提供的属性页),或者功能关键字及其选项关键字均已被识别,但选项关键字对该功能无效(例如,在不支持 Type42 TTRasterizer 的打印机上尝试将 %TTDownloadFormat 设置为“NativeTrueType”),则该功能/选项对将被忽略,而该功能的当前选项将继续生效。

pmszFeatureOptionBuf 指向的缓冲区中的功能/选项关键字对顺序会对 SetOptions 调用的结果产生影响。 例如,以下两种不同的命令会产生不同的结果。

pmszFeatureOptionBuf %PagePerSheet %MetafileSpooling
"%MetafileSpooling\0False\0%PagePerSheet\0Booklet\0\0" "Booklet" “True”
"%PagePerSheet\0Booklet\0%MetafileSpooling\0False\0\0" "1" “False”

有关出现这些结果的原因的阐述,请参阅上文中关于 %MetafileSpooling 的注释 3。