<div> JavaScript is disabled on your browser.
Skip navigation links
Java™ Platform
Standard Ed. 8

Package javax.print.attribute

提供类和接口描述java TM打印服务属性的类型以及如何将它们收集到的属性集。

See: 描述

Package javax.print.attribute Description

提供类和接口描述java TM打印服务属性的类型以及如何将它们收集到的属性集。

什么是一个属性?

时设置的打印作业,客户指定了两件事: 打印数据处理指令。打印数据是要打印的实际内容。处理指令告诉打印机如何打印打印数据,如:使用什么媒体,打印多少份,以及是否打印在一张纸的一个或两个侧面上。客户端指定这些处理指令与java打印服务的属性定义的API。

打印数据和处理指令是独立的实体。这意味着:

处理指令不指定打印作业如何处理请求;每个处理指令只描述打印作业的结果的说明。打印作业确定其实现由处理指令指定的结果的方式。表示处理指令作为描述性项目提供了更多的灵活性,用于实现打印作业。

属性类别和值

每个打印机都有一套的能力,如在不同的纸张大小和打印多个副本的能力打印能力。每个功能都有一系列的值。例如,打印机的定位能力可能有这一系列的值:[风景,人像]。对于每个打印请求,将设置为这些值的一个。java打印服务API使用的术语 属性类别指打印机的能力和长期 属性值指能力的价值。

在java打印服务的API,一个属性类的实现Attribute接口的java类的代表。属性值是这样一个类的实例或它的子类的实例。例如,指定的份数,一个应用程序构建与所需份数的Copies类的一个实例并使用Copies例如打印请求的一部分。在这种情况下,该Copies类表示的属性类别,和Copies实例表示的属性值。

attribute角色

当提交打印作业的打印机,客户端提供对打印数据特征的属性,如文件名,以及如何打印数据应该打印,如双面,五份。如果一个打印作业由多个打印数据组成,不同的部分可能有不同的处理指令,如8×11英寸的第一个文件的媒体,和11×17英寸的另一个文件的媒体。

一旦打印机开始打印作业处理,额外的关于这个工作的信息变得可用,其中可能包括:工作状态(如完整的或排队)和打印的页数为止。这些信息也属于属性。属性也可以描述打印机本身,如:打印机名称、打印机位置和队列的工作数等。

java打印服务API定义了不同种类的五个子的Attribute属性:

每个属性类实现一个或多个这些标记子接口显示属性可以使用API。如果一个属性类实现多标签属性的接口,可以在多种环境中使用。例如,媒体属性可应用于打印工作的一个文件作为一个 DocAttribute或整个打印作业作为一个 PrintRequestAttribute。某些低级别的属性永远不会被使用在他们自己的,但总是聚集到更高级别的属性。这些低级的属性类只能实现接口 Attribute,没有任何标记的接口。

java打印服务API定义了一组标准属性类的蓝本,在互联网打印协议(IPP)1.1版本属性。标准属性类在分装javax.print.attribute.standard保持实际属性类的封装定义的通用设备从概念上把attribute。

属性集

客户端通常需要提供多个处理指令提交打印作业时。例如,用户可能需要指定一个A4大小媒体和景观方向。要发送多个处理指令,客户收集的属性到一个属性集,其中java打印服务API代表与 AttributeSet接口。

AttributeSet界面类似于Map接口:它提供了一个Map的关键值,其中每个键都是独特的,不能包含多个值。然而,这AttributeSet界面设计专门支持java的打印服务需求的API。一个AttributeSet要求:

  1. 在一个AttributeSet每个按键对应一个类别,和关键的价值只能是一个属于的主要代表类别的属性值。因此,不同于Map,一AttributeSet制约的关键可能的值:一个属性不能设置为一个属性的值不属于这一类。
  2. 相同类别中的两个属性都可以存在于同一个集合中。例如,属性集合不能包含“片面”属性和“双面”属性,因为这两个属性给打印机冲突的指令。
  3. 只有属性实现Attribute接口可以被添加到组。

attribute包包括HashAttributeSet为属性设置界面的具体实现。HashAttributeSet提供一个属性集基于哈希映射。你可以用这个实现或提供自己的接口实现AttributeSet

java打印服务API提供了四个专业的属性集被限制为只包含一个属性的四种,在Attribute Roles节讨论:

注意只有四种属性集是列在这里,但有五种属性。接口 SupportedValuesAttribute表示一种属性,一个属性给出了支持的值。支持的值属性是不会聚集成属性集,所以没有属性设置界面下定义为他们。

在某些上下文中,属性集是只读的,这意味着客户端只允许检查一个属性集的内容,但不改变它们。在其他情况下,该属性设置为读写,这意味着客户端允许检查和改变一个属性集的内容。一个只读属性,调用一个变异操作引发UnmodifiableSetException

包,包括每一个attribute属性设置完成一个具体的实现:

所有这些类扩展 HashAttributeSet和执行的属性设置只允许包含相应的类属性的限制。

属性类的设计

属性值是一个小的原子数据项,例如整型或枚举的值。java打印服务API不使用原始数据类型,如int,表示这些属性值:类型安全 和代表所有属性一致,java打印服务API定义了每个属性类别为一类,如类 Copies,类和类 SidesPrinterResolution每个属性类的包装。一个或多个原始数据项包含该属性的值。属性集操作在添加属性时,在属性类别对象之间进行频繁的比较,在同一类别中查找现有的属性,并查找给定类别的属性。因为一个属性类是代表一个类,属性值可以比较快的 Class.equals方法进行。

尽管java打印服务API包含了大量不同的属性类别,只有几个不同类型的属性值。大多数属性可以用少量的数据类型来表示,如:整数值、整数范围、文本或整数值的枚举等。一类接受的属性值的类型称为属性的抽象语法。提供一致性和减少重复代码,java打印服务API定义了抽象语法类来表示每个抽象语法,这些类作为标准属性的父母尽可能。抽象语法类是:

抽象语法类独立于使用它们的属性。事实上,与打印无关的应用程序可以使用抽象的语法类。虽然大多数标准属性类扩展了抽象语法类中的一个,但不需要将属性类扩展到这些类中的一个。抽象语法类只提供了一个方便的实现,可以通过多个属性类共享。

每个属性类实现Attribute接口,直接或间接地将其标记为打印属性。属性类,可以出现在特定的上下文中限制属性集还实现了一个或多个接口的Attribute。大多数属性类也扩展了适当的抽象语法类以获得实现。考虑Sides属性类:

public class Sides
  extends EnumSyntax
  implements DocAttribute, PrintRequestAttribute, PrintJobAttribute
  {
  public final Object getCategory()
    {
    return Sides.class;
    }
  ...
  }

由于每个属性类实现Attribute,每个属性类必须提供的getCategory方法的实现,它返回的属性类别。在Sides案例,getCategory方法返回的Sides.classgetCategory方法最终保证任何厂商定义的一个标准属性类的子类出现在同一范畴。每一个属性对象都是不可变的,一旦构造,使属性对象引用可以自由地传递。要获得不同的属性值,构造一个不同的属性对象。

属性供应商

java打印服务API的设计使得供应商可以: 定义属性的新值,客户端可以构造任意值等属性在运行时实例。然而,枚举属性使用 EnumSyntax抽象语法类指定所有可能的属性值在编译时为属性类的单实例。这意味着新的枚举值不能在运行时构建。为了定义一个标准枚举属性的新的供应商特定值,供应商必须定义一个新的属性类,指定新的单例实例。为了确保新的属性值属于同一类别中的标准属性值,新的属性类必须是标准属性类的子类。

定义一个新的属性类别,一个供应商定义一个新的属性类。这类的属性,如标准属性类,实现了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,null引用参数的方法不正确,除非明确记录方法的有意义的解释。相反的用法是不正确的编码,并可能会导致运行时间的异常,无论是立即或在稍后的时间。时和时是典型的和可以接受的这种情况下运行时的异常实例。

从以下版本开始:
1.4
Skip navigation links
Java™ Platform
Standard Ed. 8

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.

本帮助文档是使用 《百度翻译》翻译,请与英文版配合使用 by--QQ:654638585