Module java.desktop
Package javax.print

Interface Doc

所有已知的实现类:
SimpleDoc

public interface Doc
接口Doc指定了为打印作业提供一份打印数据的对象的接口。"Doc"是一个简短、易于发音的术语,意思是"一份打印数据"。客户端向打印作业传递一个实现了接口Doc的对象,打印作业调用该对象的方法来获取打印数据。Doc接口允许打印作业:
  • 确定打印数据可用的格式或"文档类型"(类DocFlavor),文档类型指定了打印数据格式(一个MIME类型)和打印数据来源对象的表示类。
  • 获取打印数据表示对象,该对象是文档类型表示类的实例。然后打印作业可以从表示对象获取实际的打印数据。
  • 获取指定文档的打印属性,这些属性指定文档的附加特性或指定要应用于文档的处理指令。打印属性在包javax.print.attribute中定义。文档返回存储在javax.print.attribute.DocAttributeSet中的打印属性。
接口Doc的实现中的每个方法都允许每次调用方法时始终返回相同的对象。这对于打印作业或其他调用文档对象的调用者有影响,因为打印数据表示对象"消耗"打印数据,当调用者获取打印数据时,例如一个打印数据表示对象是一个流。一旦打印作业调用了getPrintData()并获取了流,任何进一步调用getPrintData()将返回相同的流对象,可能已经在进行读取,而不是一个新的流对象,该对象将重新从头读取打印数据。指定文档对象以这种方式行为简化了文档对象的实现,并且有理由认为特定文档仅打算将打印数据传递给一个打印作业,而不是传递给几个不同的打印作业。(要将相同的打印数据传递给几个不同的打印作业,您必须在相同的打印数据源上创建几个不同的文档对象。)

接口Doc提供了相当大的实现灵活性。当文档对象构造时,打印数据可能已经存在。在这种情况下,文档方法返回的对象可以提供给文档的构造函数,存储在文档中,并在需要时简单地返回。另外,当文档对象构造时,打印数据可能尚不存在。在这种情况下,文档对象可能提供一种"延迟"实现,仅在打印作业需要时(当打印作业调用getPrintData()方法时)生成打印数据表示对象(和/或打印数据)。

对于同时访问同一文档的客户端线程数量没有限制。因此,接口Doc的所有实现必须设计为支持多线程安全。

然而,从Doc获取的打印数据只能有一个消费者。

如果从客户端获取的打印数据是一个流,通过调用DocgetReaderForText()getStreamForBytes()方法获取,或者因为打印数据源已经是一个InputStreamReader,那么打印服务应该在所有作业完成条件下为客户端关闭这些流。有以下注意事项。如果打印数据本身是一个流,服务将始终关闭它。如果打印数据是其他可以请求为流的东西,服务只有在终止前获取了流时才会关闭流。也就是说,仅仅因为打印服务可能会请求数据作为流,并不意味着它会这样做,这意味着依赖服务关闭它们的Doc实现者应该仅在响应于服务的请求时创建这些流。

  • Method Summary

    Modifier and Type
    Method
    Description
    获取此文档对象的打印属性集。
    确定此文档对象将以哪种文档类型提供其打印数据片段。
    获取包含此文档对象的打印数据片段的表示对象,其格式对应于支持的文档类型。
    获取用于从此文档中提取字符打印数据的读取器。
    获取用于从此文档中提取字节打印数据的输入流。
  • Method Details

    • getDocFlavor

      DocFlavor getDocFlavor()
      确定此文档对象将以哪种文档类型提供其打印数据片段。
      返回:
      文档类型
    • getPrintData

      Object getPrintData() throws IOException
      获取包含此文档对象的打印数据片段的表示对象,其格式对应于支持的文档类型。方法getPrintData()返回一个表示类的实例,其名称由getDocFlavor().getRepresentationClassName()给出,并且返回值可以从Object类转换为该表示类。
      返回:
      打印数据表示对象
      抛出:
      IOException - 如果表示类是一个流并且在构造流时发生I/O错误
    • getAttributes

      DocAttributeSet getAttributes()
      获取此文档对象的打印属性集。如果返回的属性集包括特定属性X的一个实例,则打印机必须使用该属性值用于此文档,覆盖作业属性集中属性X的任何值。如果返回的属性集不包括特定属性X的一个实例,或者返回null,则打印机必须查阅作业属性集以获取属性X的值,如果在那里找不到,则打印机必须使用一个实现相关的默认值。返回的属性集是不可修改的。
      返回:
      此文档的打印属性的不可修改集,或null以从作业的属性集中获取所有属性值
    • getReaderForText

      Reader getReaderForText() throws IOException
      获取用于从此文档中提取字符打印数据的读取器。如果DocFlavor具有以下打印数据表示类之一,则Doc实现必须支持此方法,并在否则返回null
      • char[]
      • java.lang.String
      • java.io.Reader
      文档的打印数据表示对象用于构造并返回一个Reader,用于从打印数据表示对象中以字符流的形式读取打印数据。但是,如果打印数据表示对象本身是一个Reader,那么打印数据表示对象将直接返回。
      返回:
      用于从此文档中读取打印数据字符的读取器。如果无法提供读取器,因为此文档不符合上述标准,则返回null
      抛出:
      IOException - 如果在创建读取器时发生I/O错误
    • getStreamForBytes

      InputStream getStreamForBytes() throws IOException
      获取用于从此文档中提取字节打印数据的输入流。如果DocFlavor具有以下打印数据表示类之一,则Doc实现必须支持此方法,并在否则返回null
      • byte[]
      • java.io.InputStream
      获取此文档的打印数据表示对象,然后创建并返回一个用于从打印数据表示对象中以字节流的形式读取打印数据的输入流。但是,如果打印数据表示对象本身是一个输入流,则打印数据表示对象将直接返回。
      返回:
      用于从此文档中读取打印数据字节的输入流。如果无法提供输入流,因为此文档不符合上述标准,则返回null
      抛出:
      IOException - 如果在创建输入流时发生I/O错误