接口 | 描述 |
---|---|
Attribute |
接口属性是由任何和每个打印属性类实现的基本接口,以指示该类表示打印属性。
|
AttributeSet |
Interface AttributeSet指定一组打印属性的接口。
|
DocAttribute |
接口DocAttribute是打印属性类实现的标记接口,用于指示属性表示文档的设置。
|
DocAttributeSet |
接口DocAttributeSet指定一组doc属性的接口,即
|
PrintJobAttribute |
PrintJobAttribute是打印属性类实现的标记界面,用于指示属性描述打印作业的状态或打印作业的其他一些特性。
|
PrintJobAttributeSet |
界面PrintJobAttributeSet指定一组打印作业属性的接口,即
|
PrintRequestAttribute |
接口PrintRequestAttribute是打印属性类实现的标记接口,用于指示属性表示打印作业的请求设置。
|
PrintRequestAttributeSet |
Interface PrintRequestAttributeSet指定一组打印请求属性的接口,即
|
PrintServiceAttribute |
接口PrintServiceAttribute是打印属性类实现的标记接口,用于指示属性描述打印服务的状态或打印服务的其他特性。
|
PrintServiceAttributeSet |
接口PrintServiceAttributeSet指定一组打印作业属性的接口,即
|
SupportedValuesAttribute |
Interface SupportedValuesAttribute是打印属性类实现的标记接口,用于指示属性描述了另一个属性的支持值。
|
类 | 描述 |
---|---|
AttributeSetUtilities |
Class AttributeSetUtilities提供用于操作AttributeSets的静态方法。
|
DateTimeSyntax |
类DateTimeSyntax是一个抽象基类,提供值为日期和时间的所有属性的常见实现。
|
EnumSyntax |
类EnumSyntax是提供所有“类型安全枚举”对象的通用实现的抽象基类。
|
HashAttributeSet |
类HashAttributeSet提供
AttributeSet 实现具有哈希映射的特性。
|
HashDocAttributeSet |
HashDocAttributeSet类提供了一个属性集,它从88497327678458类继承其实现,并强制接口 DocAttributeSet 的语义限制 。
|
HashPrintJobAttributeSet |
HashPrintJobAttributeSet类提供一个属性集,它从 HashAttributeSet 类继承其实现,并强制实现接口PrintJobAttributeSet 的语义限制 。
|
HashPrintRequestAttributeSet |
HashPrintRequestAttributeSet类从884973278766类继承其实现,并强制实现接口 PrintRequestAttributeSet 的语义限制 。
|
HashPrintServiceAttributeSet |
HashPrintServiceAttributeSet类提供了一个属性集,它从 HashAttributeSet 类继承其实现,并强制接口PrintServiceAttributeSet 的语义限制 。
|
IntegerSyntax |
Class IntegerSyntax是一个抽象基类,提供了具有整数值的所有属性的常见实现。
|
ResolutionSyntax |
Class ResolutionSyntax是一个抽象基类,提供表示打印机分辨率的所有属性的常见实现。
|
SetOfIntegerSyntax |
类SetOfIntegerSyntax是一个抽象基类,提供了所有属性的常见实现,其值是一组非负整数。
|
Size2DSyntax |
Class Size2DSyntax是一个抽象基类,提供表示二维大小的所有属性的常见实现。
|
TextSyntax |
Class TextSyntax是一个抽象基类,提供了值为字符串的所有属性的常见实现。
|
URISyntax |
类URISyntax是一个抽象基类,提供其值为统一资源标识符(URI)的所有属性的常见实现。
|
异常 | 描述 |
---|---|
UnmodifiableSetException |
抛出以表示所请求的操作无法执行,因为该集合是不可修改的。
|
打印数据和处理指令是分开的实体。 这意味着:
处理指令没有指定打印作业如何处理请求; 每个处理指令只是打印作业结果的描述。 打印作业确定其实现由处理指令指定的结果的方式。 将处理指令表示为描述性项目为实现打印作业提供了更多的灵活性。
在Java Print Service API中,属性类别由实现Attribute接口的Java类来表示。 属性值是这种类或其子类之一的实例。 例如,要指定份数,应用程序将构建具有所需副本数的Copies类的实例,并将Copies
实例用作打印请求的一部分。 在这种情况下, Copies
类表示属性类别, Copies
实例表示属性值。
一旦打印机开始处理打印作业,有关作业的其他信息就可用,其中可能包括:作业状态(如完成或排队 )以及目前打印的页数。 这些信息也是属性。 属性还可以描述打印机本身,例如:打印机名称,打印机位置和排队的作业数。
Java Print Service API定义了这些不同类型的属性,其中有五个子接口为Attribute
:
DocAttribute
或整个打印作业为PrintRequestAttribute
。
某些低级别属性不会自动使用,但始终会聚合到更高级别的属性中。
这些低级属性类只实现接口Attribute ,而不是任何标记子接口。
Java Print Service API定义了一组基于Internet打印协议(IPP)版本1.1中的属性建立的标准属性类。 标准属性类在子包javax.print.attribute.standard的子包中,以使实际属性类在概念上与包javax.print.attribute中定义的通用设备分开。
AttributeSet
接口类似于Map接口:它提供了一个键到值的映射,其中每个键是唯一的,并且可以包含不超过一个值。 但是, AttributeSet
接口旨在专门支持Java Print Service API的需求。 一个AttributeSet
要求:
AttributeSet
中的每个键对应于一个类别,该键的值只能是属于由该键表示的类别的属性值之一。 因此,与Map
不同, AttributeSet
键的可能值:不能将属性类别设置为不属于该类别的属性值。 Attribute
属性才能添加到集合中。 javax.print.attribute包包含HashAttributeSet作为属性集接口的具体实现。 HashAttributeSet
提供了一种基于哈希映射的属性集。 您可以使用此实现或提供您自己实现的接口AttributeSet
。
Java Print Service API提供了一个属性集的四个专门化,它们被限制为仅包含四种属性之一,如Attribute Roles部分所述:
请注意,这里只列出了四种属性集,但有五种属性。 接口SupportedValuesAttribute表示给出另一个属性的支持值的属性。 支持值属性永远不会聚合到属性集中,因此没有为它们定义属性集子接口。 在某些情况下,属性集是只读的,这意味着只允许客户端检查属性集的内容,但不能更改它们。 在其他上下文中,属性集是读写,这意味着允许客户端检查和更改属性集的内容。 对于只读属性集,调用变量操作会引发一个UnmodifiableSetException
。
包javax.print.attribute包括每个属性集子接口的一个具体实现:
Copies
,类别Sides和类别PrinterResolution 。
每个属性类都包装一个或多个包含属性值的原始数据项。
属性集合操作在添加属性时,在属性类别对象之间执行频繁比较,在同一类别中查找现有属性,并查找给定其类别的属性。
因为一个属性类别由一个类来表示,所以可以用Class.equals
方法执行快速的属性值比较。
即使Java Print Service API包含大量不同的属性类别,只有几种不同类型的属性值。 大多数属性可以由少量数据类型表示,例如:整数值,整数范围,文本或整数值的枚举。 类别接受的属性值的类型称为属性的抽象语法。 为了提供一致性和减少代码重复,Java Print Service API定义了抽象语法类来表示每个抽象语法,并且尽可能将这些类用作标准属性的父级。 抽象语法类是:
每个属性类实现Attribute
接口,无论是直接或间接地将其标记为打印属性。 可以在特定上下文中出现在受限属性集中的属性类也实现一个或多个Attribute的Attribute
。 大多数属性类还扩展了适当的抽象语法类来实现。 考虑Sides
属性类:
public class Sides extends EnumSyntax implements DocAttribute, PrintRequestAttribute, PrintJobAttribute { public final Object getCategory() { return Sides.class; } ... }
由于每个属性类都实现了Attribute
,所以每个属性类都必须为getCategory
方法提供一个返回属性类别的实现。 在Sides
的情况下, getCategory
方法返回Sides.class
。 getCategory
方法是最终的,以确保标准属性类的任何供应商定义的子类出现在同一类别中。 每个属性对象一旦构造就是不可变的,以便可以自由地传递属性对象引用。 要获取不同的属性值,请构造不同的属性对象。
EnumSyntax
属性将编译时的所有可能的属性值指定为属性类的单例实例。
这意味着在运行时不能构造新的枚举值。
要为标准枚举属性定义新的供应商特定值,供应商必须定义新的属性类,指定新的单例实例。
为了确保新属性值与标准属性值属于相同的类别,新属性类必须是标准属性类的子类。
要定义一个新的属性类别,供应商定义一个新的属性类。 该属性类与标准属性类一样,实现Attribute
或其子Attribute
之一,并扩展了一个抽象语法类。 供应商可以使用现有的抽象语法类或定义新的抽象语法类。 新的供应商定义的属性可以在使用Attribute
地方使用,例如在AttributeSet
。
PrintRequestAttributeSet
,因为打印请求属性是客户端通常指定的属性类型。
此示例演示如何创建一个打印请求属性集,并定位可以根据指定的属性打印文档的打印机:
FileInputStream psStream; try { psstream = new FileInputStream("file.ps"); } catch (FileNotFoundException ffne) { } if (psstream == null) { return; } //Set the document type. See the DocFlavor documentation for //more information. DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT; Doc myDoc = new SimpleDoc(pstream, psInFormat, null); PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(new Copies(5)); aset.add(MediaSize.A4); aset.add(Sides.DUPLEX); PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset); if (services.length > 0) { DocPrintJob job = services[0].createPrintJob(); try { job.print(myDoc, aset); } catch (PrintException pe) {} }
请注意:在javax.print API中,方法的空参考参数是不正确的,除非在方法中明确记录为具有有意义的解释。 使用相反的是错误的编码,可能会立即或稍后导致运行时异常。 IllegalArgumentException和NullPointerException是这种情况的典型和可接受的运行时间异常的示例。