- 所有已知的实现类:
-
SimpleDoc
public interface Doc
接口
Doc
指定了为打印作业提供一份打印数据的对象的接口。"Doc"是一个简短、易于发音的术语,意思是"一份打印数据"。客户端向打印作业传递一个实现了接口Doc
的对象,打印作业调用该对象的方法来获取打印数据。Doc
接口允许打印作业:
- 确定打印数据可用的格式或"文档类型"(类
DocFlavor
),文档类型指定了打印数据格式(一个MIME类型)和打印数据来源对象的表示类。 - 获取打印数据表示对象,该对象是文档类型表示类的实例。然后打印作业可以从表示对象获取实际的打印数据。
- 获取指定文档的打印属性,这些属性指定文档的附加特性或指定要应用于文档的处理指令。打印属性在包
javax.print.attribute
中定义。文档返回存储在javax.print.attribute.DocAttributeSet
中的打印属性。
Doc
的实现中的每个方法都允许每次调用方法时始终返回相同的对象。这对于打印作业或其他调用文档对象的调用者有影响,因为打印数据表示对象"消耗"打印数据,当调用者获取打印数据时,例如一个打印数据表示对象是一个流。一旦打印作业调用了getPrintData()
并获取了流,任何进一步调用getPrintData()
将返回相同的流对象,可能已经在进行读取,而不是一个新的流对象,该对象将重新从头读取打印数据。指定文档对象以这种方式行为简化了文档对象的实现,并且有理由认为特定文档仅打算将打印数据传递给一个打印作业,而不是传递给几个不同的打印作业。(要将相同的打印数据传递给几个不同的打印作业,您必须在相同的打印数据源上创建几个不同的文档对象。)
接口Doc
提供了相当大的实现灵活性。当文档对象构造时,打印数据可能已经存在。在这种情况下,文档方法返回的对象可以提供给文档的构造函数,存储在文档中,并在需要时简单地返回。另外,当文档对象构造时,打印数据可能尚不存在。在这种情况下,文档对象可能提供一种"延迟"实现,仅在打印作业需要时(当打印作业调用getPrintData()
方法时)生成打印数据表示对象(和/或打印数据)。
对于同时访问同一文档的客户端线程数量没有限制。因此,接口Doc
的所有实现必须设计为支持多线程安全。
然而,从Doc
获取的打印数据只能有一个消费者。
如果从客户端获取的打印数据是一个流,通过调用Doc
的getReaderForText()
或getStreamForBytes()
方法获取,或者因为打印数据源已经是一个InputStream
或Reader
,那么打印服务应该在所有作业完成条件下为客户端关闭这些流。有以下注意事项。如果打印数据本身是一个流,服务将始终关闭它。如果打印数据是其他可以请求为流的东西,服务只有在终止前获取了流时才会关闭流。也就是说,仅仅因为打印服务可能会请求数据作为流,并不意味着它会这样做,这意味着依赖服务关闭它们的Doc
实现者应该仅在响应于服务的请求时创建这些流。
-
Method Summary
Modifier and TypeMethodDescription获取此文档对象的打印属性集。确定此文档对象将以哪种文档类型提供其打印数据片段。获取包含此文档对象的打印数据片段的表示对象,其格式对应于支持的文档类型。获取用于从此文档中提取字符打印数据的读取器。获取用于从此文档中提取字节打印数据的输入流。
-
Method Details
-
getDocFlavor
DocFlavor getDocFlavor()确定此文档对象将以哪种文档类型提供其打印数据片段。- 返回:
- 文档类型
-
getPrintData
获取包含此文档对象的打印数据片段的表示对象,其格式对应于支持的文档类型。方法getPrintData()
返回一个表示类的实例,其名称由getDocFlavor()
.getRepresentationClassName()
给出,并且返回值可以从Object
类转换为该表示类。- 返回:
- 打印数据表示对象
- 抛出:
-
IOException
- 如果表示类是一个流并且在构造流时发生I/O错误
-
getAttributes
DocAttributeSet getAttributes()获取此文档对象的打印属性集。如果返回的属性集包括特定属性X的一个实例,则打印机必须使用该属性值用于此文档,覆盖作业属性集中属性X的任何值。如果返回的属性集不包括特定属性X的一个实例,或者返回null
,则打印机必须查阅作业属性集以获取属性X的值,如果在那里找不到,则打印机必须使用一个实现相关的默认值。返回的属性集是不可修改的。- 返回:
-
此文档的打印属性的不可修改集,或
null
以从作业的属性集中获取所有属性值
-
getReaderForText
获取用于从此文档中提取字符打印数据的读取器。如果DocFlavor
具有以下打印数据表示类之一,则Doc
实现必须支持此方法,并在否则返回null
:- char[]
- java.lang.String
- java.io.Reader
Reader
,用于从打印数据表示对象中以字符流的形式读取打印数据。但是,如果打印数据表示对象本身是一个Reader
,那么打印数据表示对象将直接返回。- 返回:
-
用于从此文档中读取打印数据字符的读取器。如果无法提供读取器,因为此文档不符合上述标准,则返回
null
。 - 抛出:
-
IOException
- 如果在创建读取器时发生I/O错误
-
getStreamForBytes
获取用于从此文档中提取字节打印数据的输入流。如果DocFlavor
具有以下打印数据表示类之一,则Doc
实现必须支持此方法,并在否则返回null
:- byte[]
- java.io.InputStream
- 返回:
-
用于从此文档中读取打印数据字节的输入流。如果无法提供输入流,因为此文档不符合上述标准,则返回
null
。 - 抛出:
-
IOException
- 如果在创建输入流时发生I/O错误
-