选项定义

本主题不是最新主题。 有关最新信息,请参阅 打印架构规范

定义 Option 时,关键考虑因素是这样做的方式是,它可以与同一功能中包含的其他 Option 实例进行有意义的比较。 比较必须有意义,因为 Option 实例不仅用于定义设备的配置,还用于定义作业的配置,与用于创建配置的设备或 PrintCapabilities 无关。 功能中的其他 Option 实例可以出现在同一 PrintCapabilities 文档或另一个代表不同设备的 PrintCapabilities 文档(由另一方独立定义的 PrintCapabilities 文档)中。 客户端选择要用于呈现作业或文档的设备配置后,该配置通常以 PrintTicket 的形式与作业或文档一起保存。 PrintTicket 包含一组 Option 实例,通常为 PrintCapabilities 文档中定义的每个功能各一个。 选项实例必须是可移植的,并且必须保留打印意向,以便在将此 PrintTicket 提供给其他设备(即使是具有由不同作者编写的不同 PrintCapabilities 文档的设备)时传达意向。 这种可移植性的主要优点是,如果其他设备不专门支持 PrintTicket 中包含的 Option,则设备驱动程序或子系统能够识别并选择功能最接近的选项。

驱动程序main PrintTicket 函数之一是标识 PrintCapabilities 文档中与 PrintTicket 中列出的特定选项最匹配的设备选项。 在此匹配或设备驱动程序定义的评分过程中,PrintTicket 中的选项称为 引用 选项,而 PrintCapabilities 文档中的 Option 称为 候选 选项。 常规匹配指标是候选和引用 Option 实例中匹配的 ScoredProperty 实例的数目;匹配次数较多通常表示打印意向的保存效果更好。 在评分过程中,你可能会选择对某些 ScoredProperty 元素给予比其他元素更大的权重。

可以通过确保属于同一功能的所有 Option 实例都具有一个或多个 ScoredProperty 元素,使 Option 实例可移植。 这意味着,每个 Option 实例中都会显示一组 ScoredProperty 元素, (属于同一功能) 。 例如,如果每个 Option 实例都包含定义内部 PageMediaSize 属性的 ScoredProperty 元素:MediaSizeWidth 和 MediaSizeHeight,则 PageMediaSize 功能的选项实例是可移植的。 然后,设备驱动程序或子系统代码可以通过比较这些 ScoredProperty 值的差异来确定两个 Option 实例的同意程度。 如果 PrintCapabilities 文档中没有与 PrintTicket 中的选项完全匹配,则设备驱动程序可以轻松确定并选择具有最接近匹配媒体尺寸的选项。

在本例中,两个对象 (Option 实例,如果满足以下三个条件,则) 具有共同元素或等效元素。

  1. 这两个元素属于同一元素类型。

  2. 这两个元素的名称属性 (相同,或者两个元素都不包含名称属性) 。

  3. 要比较的元素的父级链(从考虑的两个对象向上)必须满足条件 1 和 2。

例如,假设有两个 Option 实例,其中每个实例都包含一个 ScoredProperty 实例,并且其中每个 ScoredProperty 实例都包含一个 Property 实例。 显然,第一个条件满足 (两个 Property 实例是同一类型) ,并且第三个条件的一部分满足, (Property 实例的父级是同一类型,ScoredProperty,而这些元素的父元素是 Option 实例,后者也属于同一类型) 。 如果属性实例、ScoredProperty 实例和 Option 实例的名称属性分别相同或未提供,则这两个 Option 实例具有共同的元素。

从上述内容来看,创建 Option 实例的第一步是定义大多数或所有 Option 实例中存在的一组 ScoredProperty 元素。 如果设备配置属性可由标准功能表示 (打印架构关键字) 中列出的功能,请注意标准选项实例中通用的 ScoredProperty 元素。 应确保引入的任何新 Option 实例也包含这些 ScoredProperty 元素。 始终可以根据需要添加其他 ScoredProperty 元素,以区分 Option 实例与标准 Option 实例。 如果有充分的理由,甚至可以删除一个或多个共同的 ScoredProperty 元素,尽管这降低了此类选项的可移植性。 当然,可移植性注意事项建议使用未修改的标准 Option 实例,除非 Option 和标准 Option 实例之间存在一些内在差异,这些差异必须反映在新的 Option 实例中。

以下示例演示了你可能希望将 ScoredProperty 元素添加到 Option 实例的情况。 PageMediaSize 功能的所有标准选项实例都具有 MediaSizeWidth 和 MediaSizeHeight ScoredProperty 元素。 假设设备可以通过横向 (LongEdgeFirst) 或纵向 (ShortEdgeFirst) 馈送纸张来支持其中一种标准字母介质大小。 假设你不希望引入新的馈送方向功能来公开这种自由度,则可以改为修改 Letter 的两个 PageMediaSize 选项实例,以合并纸张馈送方向。 对于这两个字母选项实例,请从标准 PageMediaSize Option 实例开始,并添加新的 ScoredProperty 元素来表示 FeedDirection。 在一个 Option 实例中,将 FeedDirection ScoredProperty 设置为 LongEdgeFirst;在其他 Option 实例中,将 FeedDirection 设置为 ShortEdgeFirst。 请注意,这些新的 Option 实例保持其可移植性。 如果选项表示字母,ShortEdgeFirst 保存到 PrintTicket,并选择仅支持字母标准选项的其他设备来呈现作业,选项匹配代码可以快速确定标准选项字母与选项字母 ShortEdgeFirst 的最佳匹配。 这是最佳匹配的原因是所有 ScoredProperty 实例都同意,但 FeedDirection ScoredProperty 除外,它不存在于 Letter 标准选项中。

还可能会遇到以下情况:对 Option 的修改实际上更改了含义,以至于修改后的 Option 不再被视为原始选项的特殊情况。 在这种情况下,应更改 Option 的名称,以反映修改后的 Option 实例与未修改的 Option 实例之间的差异。 只有特定设备的 PrintCapabilities 文档的作者才能确定设备提供的 Option 是否与标准 Option 实例存在充分差异,以确保定义不兼容。

现在考虑以下情况:你的设备具有不对应于任何标准功能实例的设备配置属性。 在这种情况下,不能依赖标准 Option 实例来提供共有的 ScoredProperty 元素列表。 创建 ScoredProperty 实例时,main目标是将每个选项与功能中的其他选项区分开来,并描述用户为何选择一个选项, 基线是使用唯一的名称属性来描述每个 Option 的特征,而保存 name 属性的 ScoredProperty 将成为用于确定共同元素的属性。

建立一组共有的 ScoredProperty 元素后,只需为每个 ScoredProperty 分配适当的值即可创建每个选项。 与上一个示例一样,对于某些 Option 实例,可能需要添加其他 ScoredProperty 实例或删除一些通用元素,以创建适当的 Option 实例。

应注意的是,打印架构要求一组 ScoredProperty 实例、其位置以及分配给 Option 中每个 ScoredProperty 的值必须保持不变,而不依赖于配置。 打印架构的整个概念依赖于选项实例,这些实例具有在许多设备之间共享的固定、可识别的属性和 ScoredProperty 实例。

打印架构规范