uTools-Manuals/docs/java/javax/print/attribute/package-summary.html

410 lines
29 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="header">
<h1 class="title" title="Package">Package javax.print.attribute</h1>
<div class="docSummary">
<div class="block">
提供描述Java
<sup><font size="-2">TM</font></sup>打印服务属性类型以及如何将其集合到属性集中的类和接口。
</div>
</div>
<p>See: <a href="#package.description">描述</a></p>
</div><div class="contentContainer">
<ul class="blockList">
<li class="blockList">
<table border="0" cellpadding="3" cellspacing="0" class="typeSummary" summary="Interface Summary table, listing interfaces, and an explanation">
<caption>
<span>接口摘要</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">接口</th>
<th class="colLast" scope="col">描述</th>
</tr>
</tbody>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/Attribute.html" title="interface in javax.print.attribute">Attribute</a></td>
<td class="colLast">
<div class="block">
接口属性是由任何和每个打印属性类实现的基本接口,以指示该类表示打印属性。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/print/attribute/AttributeSet.html" title="interface in javax.print.attribute">AttributeSet</a></td>
<td class="colLast">
<div class="block">
Interface AttributeSet指定一组打印属性的接口。
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/DocAttribute.html" title="interface in javax.print.attribute">DocAttribute</a></td>
<td class="colLast">
<div class="block">
接口DocAttribute是打印属性类实现的标记接口用于指示属性表示文档的设置。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/print/attribute/DocAttributeSet.html" title="interface in javax.print.attribute">DocAttributeSet</a></td>
<td class="colLast">
<div class="block">
接口DocAttributeSet指定一组doc属性的接口
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/PrintJobAttribute.html" title="interface in javax.print.attribute">PrintJobAttribute</a></td>
<td class="colLast">
<div class="block">
PrintJobAttribute是打印属性类实现的标记界面用于指示属性描述打印作业的状态或打印作业的其他一些特性。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/print/attribute/PrintJobAttributeSet.html" title="interface in javax.print.attribute">PrintJobAttributeSet</a></td>
<td class="colLast">
<div class="block">
界面PrintJobAttributeSet指定一组打印作业属性的接口
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/PrintRequestAttribute.html" title="interface in javax.print.attribute">PrintRequestAttribute</a></td>
<td class="colLast">
<div class="block">
接口PrintRequestAttribute是打印属性类实现的标记接口用于指示属性表示打印作业的请求设置。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/print/attribute/PrintRequestAttributeSet.html" title="interface in javax.print.attribute">PrintRequestAttributeSet</a></td>
<td class="colLast">
<div class="block">
Interface PrintRequestAttributeSet指定一组打印请求属性的接口
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/PrintServiceAttribute.html" title="interface in javax.print.attribute">PrintServiceAttribute</a></td>
<td class="colLast">
<div class="block">
接口PrintServiceAttribute是打印属性类实现的标记接口用于指示属性描述打印服务的状态或打印服务的其他特性。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/print/attribute/PrintServiceAttributeSet.html" title="interface in javax.print.attribute">PrintServiceAttributeSet</a></td>
<td class="colLast">
<div class="block">
接口PrintServiceAttributeSet指定一组打印作业属性的接口
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/SupportedValuesAttribute.html" title="interface in javax.print.attribute">SupportedValuesAttribute</a></td>
<td class="colLast">
<div class="block">
Interface SupportedValuesAttribute是打印属性类实现的标记接口用于指示属性描述了另一个属性的支持值。
</div> </td>
</tr>
</tbody>
</table> </li>
<li class="blockList">
<table border="0" cellpadding="3" cellspacing="0" class="typeSummary" summary="Class Summary table, listing classes, and an explanation">
<caption>
<span>类摘要</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col"></th>
<th class="colLast" scope="col">描述</th>
</tr>
</tbody>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/AttributeSetUtilities.html" title="class in javax.print.attribute">AttributeSetUtilities</a></td>
<td class="colLast">
<div class="block">
Class AttributeSetUtilities提供用于操作AttributeSets的静态方法。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/print/attribute/DateTimeSyntax.html" title="class in javax.print.attribute">DateTimeSyntax</a></td>
<td class="colLast">
<div class="block">
类DateTimeSyntax是一个抽象基类提供值为日期和时间的所有属性的常见实现。
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/EnumSyntax.html" title="class in javax.print.attribute">EnumSyntax</a></td>
<td class="colLast">
<div class="block">
类EnumSyntax是提供所有“类型安全枚举”对象的通用实现的抽象基类。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/print/attribute/HashAttributeSet.html" title="class in javax.print.attribute">HashAttributeSet</a></td>
<td class="colLast">
<div class="block">
类HashAttributeSet提供
<code>AttributeSet</code>实现具有哈希映射的特性。
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/HashDocAttributeSet.html" title="class in javax.print.attribute">HashDocAttributeSet</a></td>
<td class="colLast">
<div class="block">
<span>HashDocAttributeSet类提供了一个属性集它从<a href="../../../javax/print/attribute/HashAttributeSet.html" title="javax.print.attribute中的类">88497327678458</a>类继承其实现,并强制接口<a href="../../../javax/print/attribute/HashAttributeSet.html" title="javax.print.attribute中的类"><code>DocAttributeSet</code></a>的语义<a href="../../../javax/print/attribute/DocAttributeSet.html" title="javax.print.attribute中的接口">限制</a></span>
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/print/attribute/HashPrintJobAttributeSet.html" title="class in javax.print.attribute">HashPrintJobAttributeSet</a></td>
<td class="colLast">
<div class="block">
<span>HashPrintJobAttributeSet类提供一个属性集它从<a href="../../../javax/print/attribute/HashAttributeSet.html" title="javax.print.attribute中的类"><code>HashAttributeSet</code></a>类继承其实现,并强制实现接口<a href="../../../javax/print/attribute/HashAttributeSet.html" title="javax.print.attribute中的类"><code>PrintJobAttributeSet</code></a>的语义<a href="../../../javax/print/attribute/PrintJobAttributeSet.html" title="javax.print.attribute中的接口">限制</a></span>
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/HashPrintRequestAttributeSet.html" title="class in javax.print.attribute">HashPrintRequestAttributeSet</a></td>
<td class="colLast">
<div class="block">
<span>HashPrintRequestAttributeSet类从<a href="../../../javax/print/attribute/HashAttributeSet.html" title="javax.print.attribute中的类">884973278766</a>类继承其实现,并强制实现接口<a href="../../../javax/print/attribute/HashAttributeSet.html" title="javax.print.attribute中的类"><code>PrintRequestAttributeSet</code></a>的语义<a href="../../../javax/print/attribute/PrintRequestAttributeSet.html" title="javax.print.attribute中的接口">限制</a></span>
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/print/attribute/HashPrintServiceAttributeSet.html" title="class in javax.print.attribute">HashPrintServiceAttributeSet</a></td>
<td class="colLast">
<div class="block">
<span>HashPrintServiceAttributeSet类提供了一个属性集它从<a href="../../../javax/print/attribute/HashAttributeSet.html" title="javax.print.attribute中的类"><code>HashAttributeSet</code></a>类继承其实现,并强制接口<a href="../../../javax/print/attribute/HashAttributeSet.html" title="javax.print.attribute中的类"><code>PrintServiceAttributeSet</code></a>的语义<a href="../../../javax/print/attribute/PrintServiceAttributeSet.html" title="javax.print.attribute中的接口">限制</a></span>
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/IntegerSyntax.html" title="class in javax.print.attribute">IntegerSyntax</a></td>
<td class="colLast">
<div class="block">
Class IntegerSyntax是一个抽象基类提供了具有整数值的所有属性的常见实现。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/print/attribute/ResolutionSyntax.html" title="class in javax.print.attribute">ResolutionSyntax</a></td>
<td class="colLast">
<div class="block">
Class ResolutionSyntax是一个抽象基类提供表示打印机分辨率的所有属性的常见实现。
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/SetOfIntegerSyntax.html" title="class in javax.print.attribute">SetOfIntegerSyntax</a></td>
<td class="colLast">
<div class="block">
类SetOfIntegerSyntax是一个抽象基类提供了所有属性的常见实现其值是一组非负整数。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/print/attribute/Size2DSyntax.html" title="class in javax.print.attribute">Size2DSyntax</a></td>
<td class="colLast">
<div class="block">
Class Size2DSyntax是一个抽象基类提供表示二维大小的所有属性的常见实现。
</div> </td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/TextSyntax.html" title="class in javax.print.attribute">TextSyntax</a></td>
<td class="colLast">
<div class="block">
Class TextSyntax是一个抽象基类提供了值为字符串的所有属性的常见实现。
</div> </td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../javax/print/attribute/URISyntax.html" title="class in javax.print.attribute">URISyntax</a></td>
<td class="colLast">
<div class="block">
类URISyntax是一个抽象基类提供其值为统一资源标识符URI的所有属性的常见实现。
</div> </td>
</tr>
</tbody>
</table> </li>
<li class="blockList">
<table border="0" cellpadding="3" cellspacing="0" class="typeSummary" summary="Exception Summary table, listing exceptions, and an explanation">
<caption>
<span>异常摘要</span>
<span class="tabEnd"> </span>
</caption>
<tbody>
<tr>
<th class="colFirst" scope="col">异常</th>
<th class="colLast" scope="col">描述</th>
</tr>
</tbody>
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../javax/print/attribute/UnmodifiableSetException.html" title="class in javax.print.attribute">UnmodifiableSetException</a></td>
<td class="colLast">
<div class="block">
抛出以表示所请求的操作无法执行,因为该集合是不可修改的。
</div> </td>
</tr>
</tbody>
</table> </li>
</ul>
<a name="package.description">
<!-- --> </a>
<h2 title="Package javax.print.attribute Description">Package javax.print.attribute Description</h2>
<div class="block">
<span>提供描述Java <sup><font size="-2">TM</font></sup>打印服务属性类型以及如何将其集合到属性集中的类和接口。</span>
<h3> <span>什么是属性?</span> </h3>
<span>设置打印作业时,客户端会指定两项内容: <b>打印数据</b><b>处理指令。</b></span>
<span>打印数据是要打印的实际内容。</span>
<span>处理指令告诉打印机如何打印打印数据,例如:要使用什么媒体,要打印的副本以及是否在纸张的一面或两面进行打印。</span>
<span>客户端使用Java Print Service API的属性定义指定这些处理指令。</span>
<p> <span>打印数据和处理指令是分开的实体。</span> <span>这意味着:</span> </p>
<ul>
<li> <span>您可以使用不同的处理指令在不同时间打印相同的打印数据。</span> <br/> <span>例如您可以在美国信件大小的白皮书上打印幻灯片演示文稿双面装订20份以进行讲义;</span> <span>并且您可以在美国信件尺寸的投影胶片上打印相同的幻灯片演示文稿,单面,一个副本,以实际演示幻灯片。</span> </li>
<li> <span>您可以在不同时间使用相同的处理指令来打印不同的数据。</span> <span>例如,您可以将默认处理指令设置为:美国信纸尺寸的纸张,双面,装订。</span> <span>无论何时打印作业,都会使用这些设置进行打印,除非您明确地覆盖它们。</span> </li>
</ul>
<p> <span>处理指令没有指定打印作业如何处理请求;</span> <span>每个处理指令只是打印作业结果的描述。</span> <span>打印作业确定其实现由处理指令指定的结果的方式。</span> <span>将处理指令表示为描述性项目为实现打印作业提供了更多的灵活性。</span> </p>
<h4> <span>属性类别和值</span> </h4>
<span>每个打印机都有一组功能,例如能够以不同的纸张尺寸打印,或者能够打印多个副本。</span>
<span>每个功能都有一系列的值。</span>
<span>例如,打印机的方向功能可能具有以下值的范围:[横向,纵向]。</span>
<span>对于每个打印请求,该功能被设置为这些值之一。</span>
<span>Java Print Service API使用术语<b>属性类别</b>来引用打印机功能和术语<b>属性值</b>来引用该功能的值。</span>
<p> <span>在Java Print Service API中属性类别由实现Attribute接口的Java类<a href="Attribute.html"></a>表示。</span> <span>属性值是这种类或其子类之一的实例。</span> <span>例如,要指定份数,应用程序将<a href="standard/Copies.html">构建</a>具有所需副本数的<a href="standard/Copies.html">Copies</a>类的实例,并将<code>Copies</code>实例用作打印请求的一部分。</span> <span>在这种情况下, <code>Copies</code>类表示属性类别, <code>Copies</code>实例表示属性值。</span> </p>
<h4> <span><a name="role"></a>属性角色</span> </h4>
<span>当向打印机提交打印作业时,客户端提供描述打印数据特征的属性,例如文档名称以及如何打印打印数据,如双面,五份。</span>
<span>如果打印作业由多个打印数据组成则不同的部分可能具有不同的处理指令例如第一个文档的8 x 11英寸的介质另一个文档的11 x 17英寸的介质。</span>
<p> <span>一旦打印机开始处理打印作业,有关作业的其他信息就可用,其中可能包括:作业状态(如<i>完成</i><i>排队</i> )以及目前打印的页数。</span> <span>这些信息也是属性。</span> <span>属性还可以描述打印机本身,例如:打印机名称,打印机位置和排队的作业数。</span> </p>
<p> <span>Java Print Service API定义了这些不同类型的属性其中有五个子接口为<code>Attribute</code> </span> </p>
<ul>
<li> <span><a href="DocAttribute.html">DocAttribute</a>指定单个文档的特征和要应用于单个文档的打印作业设置。</span> </li>
<li> <span><a href="PrintRequestAttribute.html">PrintRequestAttribute</a>指定应用于整个打印作业和打印作业中所有文档的设置。</span> </li>
<li> <span><a href="PrintJobAttribute.html">PrintJobAttribute</a>报告打印作业的状态。</span> </li>
<li> <span><a href="PrintServiceAttribute.html">PrintServiceAttribute</a>报告打印服务的状态。</span> </li>
<li> <span><a href="SupportedValuesAttribute.html">SupportedValuesAttribute</a>给出了另一个属性的支持值。</span> </li>
</ul>
<span>每个属性类都实现了这些标记子接口中的一个或多个以指示API可以在哪里使用该属性。</span>
<span>如果属性类实现多个标记子接口,则该属性可以在多个上下文中使用。</span>
<span>例如,媒体属性可以应用到一个文档中的打印作业作为<code>DocAttribute</code>或整个打印作业为<code>PrintRequestAttribute</code></span>
<span>某些低级别属性不会自动使用,但始终会聚合到更高级别的属性中。</span>
<span>这些低级属性类只实现接口<a href="Attribute.html">Attribute</a> ,而不是任何标记子接口。</span>
<p> <span>Java Print Service API定义了一组基于Internet打印协议IPP版本1.1中的属性建立的标准属性类。</span> <span>标准属性类在子包javax.print.attribute.standard的子包中以使实际属性类在概念上与包javax.print.attribute中定义的通用设备分开。</span> </p>
<h3> <span>属性集</span> </h3>
<span>客户端在提交打印作业时通常需要提供多个处理指令。</span>
<span>例如客户端可能需要指定A4的介质尺寸和横向。</span>
<span>要发送多个处理指令客户端将属性收集到属性集中Java Print Service API使用<a href="AttributeSet.html">AttributeSet</a>接口表示。</span>
<p> <span><code>AttributeSet</code>接口类似于<a href="../../../java/util/Map.html">Map</a>接口:它提供了一个键到值的映射,其中每个键是唯一的,并且可以包含不超过一个值。</span> <span>但是, <code>AttributeSet</code>接口旨在专门支持Java Print Service API的需求。</span> <span>一个<code>AttributeSet</code>要求:</span> </p>
<ol type="1">
<li> <span><code>AttributeSet</code>中的每个键对应于一个类别,该键的值只能是属于由该键表示的类别的属性值之一。</span> <span>因此,与<code>Map</code>不同, <code>AttributeSet</code>键的可能值:不能将属性类别设置为不属于该类别的属性值。</span> </li>
<li> <span>同一集合中不存在同一类别的两个属性。</span> <span>例如,属性集合不能同时包含“单面”属性和“双面”属性,因为这两个属性给出打印机冲突的指令。</span> </li>
<li> <span>只有实现Attribute <code>Attribute</code>属性才能添加到集合中。</span> </li>
</ol>
<p> <span>javax.print.attribute包包含<a href="HashAttributeSet.html">HashAttributeSet</a>作为属性集接口的具体实现。</span> <span><code>HashAttributeSet</code>提供了一种基于哈希映射的属性集。</span> <span>您可以使用此实现或提供您自己实现的接口<code>AttributeSet</code></span> </p>
<p> <span>Java Print Service API提供了一个属性集的四个专门化它们被限制为仅包含四种属性之一<a href="#role">Attribute Roles</a>部分所述:</span> </p>
<ul>
<li> <span><a href="DocAttributeSet.html">DocAttributeSet</a></span> </li>
<li> <span><a href="PrintRequestAttributeSet.html">PrintRequestAttributeSet</a></span> </li>
<li> <span><a href="PrintJobAttributeSet.html">PrintJobAttributeSet</a></span> </li>
<li> <span><a href="PrintServiceAttributeSet.html">PrintServiceAttributeSet</a></span> </li>
</ul>
<span>请注意,这里只列出了四种属性集,但有五种属性。</span>
<span>接口<a href="SupportedValuesAttribute.html">SupportedValuesAttribute</a>表示给出另一个属性的支持值的属性。</span>
<span>支持值属性永远不会聚合到属性集中,因此没有为它们定义属性集子接口。</span>
<p> <span>在某些情况下,属性集是只读的,这意味着只允许客户端检查属性集的内容,但不能更改它们。</span> <span>在其他上下文中,属性集是读写,这意味着允许客户端检查和更改属性集的内容。</span> <span>对于只读属性集,调用变量操作会引发一个<code>UnmodifiableSetException</code></span> </p>
<p> <span>包javax.print.attribute包括每个属性集子接口的一个具体实现</span> </p>
<ul>
<li> <span><a href="HashDocAttributeSet.html">HashDocAttributeSet</a></span> </li>
<li> <span><a href="HashPrintRequestAttributeSet.html">HashPrintRequestAttributeSet</a> </span> </li>
<li> <span><a href="HashPrintJobAttributeSet.html">HashPrintJobAttributeSet</a> </span> </li>
<li> <span><a href="HashPrintServiceAttributeSet.html">HashPrintServiceAttributeSet</a></span> </li>
</ul>
<span>所有这些类扩展为<a href="HashAttributeSet.html">HashAttributeSet</a> ,并强制限制属性集只允许包含相应类型的属性。</span>
<h3> <span>属性类设计</span> </h3>
<span>属性值是一个小的原子数据项,例如整数或枚举值。</span>
<span>由于以下原因Java Print Service API不使用原始数据类型如int来表示属性值</span>
<ul>
<li> <span>原始数据类型不是类型安全的。</span> <span>例如编译器不应该允许“副本”属性值用于“sides”属性。</span> </li>
<li> <span>某些属性必须表示为几个值的记录。</span> <span>一个例子是打印机分辨率需要两个数字例如600和300代表600 x 300 dpi。</span> </li>
</ul>
<span>对于类型安全性并统一表示所有属性Java Print Service API将每个属性类别定义为一个类例如类别<code>Copies</code> ,类别<a href="standard/Sides.html">Sides</a>和类别<a href="standard/PrinterResolution.html">PrinterResolution</a></span>
<span>每个属性类都包装一个或多个包含属性值的原始数据项。</span>
<span>属性集合操作在添加属性时,在属性类别对象之间执行频繁比较,在同一类别中查找现有属性,并查找给定其类别的属性。</span>
<span>因为一个属性类别由一个类来表示,所以可以用<code>Class.equals</code>方法执行快速的属性值比较。</span>
<p> <span>即使Java Print Service API包含大量不同的属性类别只有几种不同类型的属性值。</span> <span>大多数属性可以由少量数据类型表示,例如:整数值,整数范围,文本或整数值的枚举。</span> <span>类别接受的属性值的类型称为属性的抽象语法。</span> <span>为了提供一致性和减少代码重复Java Print Service API定义了抽象语法类来表示每个抽象语法并且尽可能将这些类用作标准属性的父级。</span> <span>抽象语法类是:</span> </p>
<ul>
<li> <span><a href="EnumSyntax.html">EnumSyntax</a>提供了类型安全的枚举,枚举值被表示为单例对象。</span> <span>每个枚举单例是枚举类的一个实例它包含一个隐藏的int值。</span> </li>
<li> <span><a href="IntegerSyntax.html">IntegerSyntax</a>是整数值属性的抽象语法。</span> </li>
<li> <span><a href="TextSyntax.html">TextSyntax</a>是文本值属性的抽象语法,包括给出文本字符串自然语言的语言环境。</span> </li>
<li> <span><a href="SetOfIntegerSyntax.html">SetOfIntegerSyntax</a>是表示范围或整数集合的<a href="SetOfIntegerSyntax.html">属性</a>的抽象语法</span> </li>
<li> <span><a href="ResolutionSyntax.html">ResolutionSyntax</a>是表示分辨率值的属性的抽象语法例如600x300 dpi。</span> </li>
<li> <span><a href="Size2DSyntax.html">Size2DSyntax</a>是表示二维尺寸的<a href="Size2DSyntax.html">属性</a>的抽象语法例如纸张尺寸为8.5 x 11英寸。</span> </li>
<li> <span><a href="DateTimeSyntax.html">DateTimeSyntax</a>是值为日期和时间的属性的抽象语法。</span> </li>
<li> <span><a href="URISyntax.html">URISyntax</a><a href="URISyntax.html">属性</a>的抽象语法,其值为统一资源指示符。</span> </li>
</ul>
<span>抽象语法类与使用它们的属性无关。</span>
<span>实际上,与打印无关的应用程序可以使用抽象语法类。</span>
<span>虽然大多数标准属性类都扩展了一个抽象语法类,但是不需要属性类来扩展这些类之一。</span>
<span>抽象语法类仅提供可由许多属性类共享的方便的实现。</span>
<p> <span>每个属性类实现<code>Attribute</code>接口,无论是直接或间接地将其标记为打印属性。</span> <span>可以在特定上下文中出现在受限属性集中的属性类也实现一个或多个Attribute的<code>Attribute</code></span> <span>大多数属性类还扩展了适当的抽象语法类来实现。</span> <span>考虑<code>Sides</code>属性类:</span> </p>
<blockquote>
<span><pre>
public class Sides
extends EnumSyntax
implements DocAttribute, PrintRequestAttribute, PrintJobAttribute
{
public final Object getCategory()
{
return Sides.class;
}
...
}
</pre></span>
</blockquote>
<p> <span>由于每个属性类都实现了<code>Attribute</code> ,所以每个属性类都必须为<a href="../../../javax/print/attribute/Attribute.html#getCategory--"><code>getCategory</code></a>方法提供一个返回属性类别的实现。</span> <span><code>Sides</code>的情况下, <code>getCategory</code>方法返回<code>Sides.class</code></span> <span><code>getCategory</code>方法是最终的,以确保标准属性类的任何供应商定义的子类出现在同一类别中。</span> <span>每个属性对象一旦构造就是不可变的,以便可以自由地传递属性对象引用。</span> <span>要获取不同的属性值,请构造不同的属性对象。</span> </p>
<h3> <span>属性供应商</span> </h3>
<span>Java Print Service API的设计使得供应商可以</span>
<ul>
<li> <span>在定义的任何标准属性定义新的供应商特定的值<a href="standard/package-summary.html">javax.print.attribute.standard</a></span> </li>
<li> <span>定义新的属性类别,表示供应商打印机的标准属性尚未支持的专有功能。</span> </li>
</ul>
<span>要为属性定义新值,客户端可以在运行时使用任意值构造此类属性的实例。</span>
<span>然而使用EnumSyntax的抽象语法类的<code>EnumSyntax</code>属性将编译时的所有可能的属性值指定为属性类的单例实例。</span>
<span>这意味着在运行时不能构造新的枚举值。</span>
<span>要为标准枚举属性定义新的供应商特定值,供应商必须定义新的属性类,指定新的单例实例。</span>
<span>为了确保新属性值与标准属性值属于相同的类别,新属性类必须是标准属性类的子类。</span>
<p> <span>要定义一个新的属性类别,供应商定义一个新的属性类。</span> <span>该属性类与标准属性类一样,实现<code>Attribute</code>或其子<code>Attribute</code>之一,并扩展了一个抽象语法类。</span> <span>供应商可以使用现有的抽象语法类或定义新的抽象语法类。</span> <span>新的供应商定义的属性可以在使用<code>Attribute</code>地方使用,例如在<code>AttributeSet</code></span> </p>
<h3> <span>使用属性</span> </h3>
<span>典型的打印应用程序使用<code>PrintRequestAttributeSet</code> ,因为打印请求属性是客户端通常指定的属性类型。</span>
<span>此示例演示如何创建一个打印请求属性集,并定位可以根据指定的属性打印文档的打印机:</span>
<blockquote>
<span><pre>
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 &gt; 0) {
DocPrintJob job = services[0].createPrintJob();
try {
job.print(myDoc, aset);
} catch (PrintException pe) {}
}
</pre></span>
</blockquote>
<p> <span>请注意在javax.print API中方法的空参考参数是不正确的除非在方法中明确记录为具有有意义的解释。</span> <span>使用相反的是错误的编码,可能会立即或稍后导致运行时异常。</span> <span>IllegalArgumentException和NullPointerException是这种情况的典型和可接受的运行时间异常的示例。</span> </p>
<p></p>
</div>
<dl>
<dt>
<span class="simpleTagLabel">从以下版本开始:</span>
</dt>
<dd>
1.4
</dd>
</dl>
</div>