![](https://csdnimg.cn/release/download_crawler_static/13084830/bga.jpg)
· 只有实现了 Attribute 接口的的属性才允许被加入到属性集中。
· 属性集中一个属性类别只能以一个属性的身份加入。例如,若属性集中已经
包含了属性 Media,那么再向属性集添加其他的 Media 属性就会覆盖之前的
Media。
与单独的属性类似,属性集也有角色。属性集角色由 AttributeSet 的子接口定
义,这与
《属性角色》
小节所讲的由 Attribute 的子接口表示属性角色相类似。
AttributeSet 的 子 接 口 有 : PrintRequestAttributeSet , PrintJobAttributeSet ,
DocAttributeSet 和 PrintServiceAttributeSet。属性集的角色决定了它所包含的属性
的类型:一个打印请求属性集只能够包含打印请求属性。Java Print Service API 包
含了 HashAttributeSet,它是实现了 AttributeSet 接口的一个实体类,当然开发者
也 可 以 提 供 各 自 对 AttributeSet 接 口 的 实 现 类 。 应 用 程 序 常 常 会 使 用
HashAttributeSet 类 的 子 类 而 不 是 使 用 它 本 身 , 这 些 子 类 有 :
HashPrintRequestAttributeSet , HashPrintJobAttributeSet ,
HashDocumentAttributeSet 和 HashPrintServiceAttributeSet。这些子类实现了相对
应的 AttributeSet 的子接口。例如:PrintRequestAttributeSet 继承了 AttributeSet,
HashPrintRequestAttributeSet 则是实现了 PrintRequestAttributeSet 的一个实体类。
使用 HashPrintRequestAttributeSet 或任何实现了 PrintRequestAttributeSet 接口的
类所创建的属性集都只能包含请求属性。
与它的子类不同,HashAttributeSet 可以包含任何类型的属性。因此当一个应
用程序需要使用两种类型以上的属性时,它只能够直接使用 HashAttributeSet。
通过 PrintService 的 getUnsupportedAttibutes 方法返回属性集就是这样一个例子。
因为不支持的属性有可能属于不同的属性角色。
至于单独的属性,应用程序通常会创建请求属性集,这是因为指明打印请求
是打印应用程序的基本功能。使用 HashPrintRequestAttributeSet 类的一个构造方
法创建一个请求属性的指令是:
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
下一部分将讲述一些可以添加到属性集中的常用的属性。
如何指定属性
无 论 是 打 印 还 是 流 化 数 据 , 都 是 以 同 样 的 方 法 指 定 属 性 。 通 常
PrintRequestAttributeSet 的使用频率远高于其他属性,这是因为打印请求属性是
为整个打印工作进行设置。又因为大多数情况下都需要为一个打印工作设置多于
一 个 属 性 , 因 此 需 要 创 建 一 个 属 性 集 。 下 面 的 示 例 创 建 了 一 个
PrintRequestAttributeSet,它规定服务在 A4 纸上以双面打印的形式打印 5 份。
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(5));
aset.add(MediaSize.ISO_A4);
aset.add(Sides.DUPLEX);