选项定义

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

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

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

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

如果满足以下三个条件,则表示有两个对象(在本例中为选项实例)具有共同 元素,或者等效地具有 相应的元素

  1. 这两个元素的类型相同。

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

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

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

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

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

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

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

建立一组 CommondProperty 元素后,为每个 ScoredProperty 分配适当的值创建每个选项非常简单。 与前面的示例一样,对于某些 Option 实例,可能需要添加其他 ScoredProperty 实例或删除一些常见元素,以创建适当的 Option 实例。

应注意的是,打印架构要求选项中分配给每个 ScoredProperty 实例的集合及其位置和分配给选项中的每个 ScoredProperty 的值必须保持不变,与配置无关。 打印架构的整个概念依赖于选项实例具有固定、可识别的属性和 ScoredProperty 实例,这些实例跨多个设备共享。

打印架构规范