Интерфейс Doc
- Все известные реализующие классы:
SimpleDoc
public interface Doc
Интерфейс Doc определяет интерфейс для объекта, который предоставляет один фрагмент данных печати для задания печати. «Doc» — это краткое, легко произносимое слово, означающее «фрагмент данных печати». Клиент передает заданию печати объект, реализующий интерфейс Doc, и задание печати вызывает методы этого объекта для получения данных печати. Интерфейс Doc позволяет заданию печати:
- Определить формат, или «тип Doc» (класс
DocFlavor), в котором доступны данные печати. Тип Doc определяет формат данных печати (тип MIME) и класс представления объекта, из которого поступают данные печати. - Получить объект представления данных печати, который является экземпляром класса представления типа Doc. Затем задание печати может получить фактические данные печати из объекта представления.
- Получить атрибуты печати, которые определяют дополнительные характеристики документа или задают инструкции по обработке, которые должны быть применены к документу. Атрибуты печати определены в пакете
javax.print.attribute. Документ возвращает свои атрибуты печати, хранящиеся в набореjavax.print.attribute.DocAttributeSet.
Doc разрешено всегда возвращать один и тот же объект каждый раз при вызове метода. Это имеет последствия для задания печати или другого вызывающего объекта Doc, объект представления данных печати которого «потребляет» данные печати при получении вызывающим объектом данных печати, например, объект представления данных печати, который является потоком. После того, как задание печати вызвало getPrintData() и получило поток, любые последующие вызовы getPrintData() вернут тот же объект потока, чтение из которого может уже быть в процессе, а не новый объект потока, который будет повторно считывать данные печати с начала. Указание объекта Doc таким образом упрощает реализацию объектов Doc и оправдано тем, что конкретный Doc предназначен для передачи данных печати только одному заданию печати, а не нескольким различным заданиям печати. (Для передачи одних и тех же данных печати нескольким различным заданиям печати необходимо создать несколько разных объектов Doc на основе одного и того же источника данных печати).
Интерфейс Doc предоставляет значительную гибкость реализации. Данные печати могут уже существовать, когда объект Doc создается. В этом случае объекты, возвращаемые методами Doc, могут быть переданы конструктору Doc, сохранены в Doc заранее и просто возвращены при вызове. В качестве альтернативы, данные печати могут еще не существовать, когда объект Doc создается. В этом случае объект Doc может предоставить реализацию «отложенного» типа, которая генерирует объект представления данных печати (и/или сами данные печати) только тогда, когда задание печати запросит это (когда задание печати вызовет метод getPrintData()).
Нет ограничений на количество клиентских потоков, которые могут одновременно обращаться к одному и тому же Doc. Поэтому все реализации интерфейса Doc должны быть разработаны с учетом многопоточности.
Однако может быть только один потребитель данных печати, полученных из Doc.
Если данные печати получаются от клиента в виде потока, вызывая методы Doc getReaderForText() или getStreamForBytes(), или потому, что источник данных печати уже является InputStream или Reader, то служба печати должна всегда закрывать эти потоки для клиента при всех условиях завершения задания. С одним замечанием. Если сами данные печати являются потоком, служба всегда закроет его. Если данные печати — что-то другое, что может быть запрошено как поток, служба закроет поток только в том случае, если она получила этот поток до завершения. То есть, просто потому, что служба печати может запросить данные как поток, не означает, что она это сделает, с последствиями, что реализаторы Doc которые полагаются на службу для их закрытия, должны создавать такие потоки только в ответ на запрос от службы.
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
DocAttributeSet |
getAttributes() |
Получает набор атрибутов печати для этого объекта Doc. |
DocFlavor |
getDocFlavor() |
Определяет тип Doc, в котором этот объект Doc предоставит свой фрагмент данных печати. |
Object |
getPrintData() |
Получает объект представления данных печати, который содержит фрагмент данных печати этого объекта Doc в формате, соответствующем поддерживаемому типу Doc. |
Reader |
getReaderForText() |
Получает чтец для извлечения данных печати символов из этого документа. |
InputStream |
getStreamForBytes() |
Получает входной поток для извлечения данных печати байтов из этого документа. |
Методы
getDocFlavor
DocFlavor getDocFlavor()
Определяет тип Doc, в котором этот объект Doc предоставит свой фрагмент данных печати.
- Возвращает:
- Тип Doc
getPrintData
Object getPrintData()
throws IOException
Получает объект представления данных печати, который содержит фрагмент данных печати этого объекта Doc в формате, соответствующем поддерживаемому типу Doc. Метод getPrintData() возвращает экземпляр класса представления, имя которого указано в getDocFlavor().getRepresentationClassName(), и возвращаемое значение можно привести от класса Object к этому классу представления.
- Возвращает:
- Объект представления данных печати
- Выбрасывает:
-
IOException- если класс представления является потоком и при построении потока произошла ошибка ввода-вывода
getAttributes
DocAttributeSet getAttributes()
Получает набор атрибутов печати для этого объекта Doc. Если возвращаемый набор атрибутов включает экземпляр конкретного атрибута X, принтер должен использовать значение этого атрибута для этого документа, переопределяя любое значение атрибута X в наборе атрибутов задания. Если возвращаемый набор атрибутов не включает экземпляр конкретного атрибута X или если null возвращается, принтер должен обратиться к набору атрибутов задания, чтобы получить значение атрибута X, а если оно там не найдено, принтер должен использовать зависящее от реализации значение по умолчанию. Возвращаемый набор атрибутов является неизменяемым.
- Возвращает:
- Неизменяемый набор атрибутов печати для этого документа или
null, чтобы получить все значения атрибутов из набора атрибутов задания
getReaderForText
Reader getReaderForText()
throws IOException
Получает чтец для извлечения данных печати символов из этого документа. Реализация Doc обязана поддерживать этот метод, если у DocFlavor один из следующих классов представления данных печати, и возвращать null в противном случае:
- char[]
- java.lang.String
- java.io.Reader
Reader для чтения данных печати как потока символов из объекта представления данных печати. Однако, если сам объект представления данных печати является Reader, то возвращается просто объект представления данных печати.
- Возвращает:
- Чтец для чтения символов данных печати из этого документа. Если чтец не может быть предоставлен, потому что этот документ не соответствует вышеуказанным критериям, возвращается
null. - Выбрасывает:
-
IOException- если при создании читателя произошла ошибка ввода-вывода
getStreamForBytes
InputStream getStreamForBytes()
throws IOException
Получает входной поток для извлечения данных печати байтов из этого документа. Реализация Doc обязана поддерживать этот метод, если у DocFlavor один из следующих классов представления данных печати, и возвращать null в противном случае:
- byte[]
- java.io.InputStream
- Возвращает:
- Входной поток для чтения байтов данных печати из этого документа. Если входной поток не может быть предоставлен, потому что этот документ не соответствует вышеуказанным критериям, возвращается
null. - Выбрасывает:
-
IOException- если при создании входного потока произошла ошибка ввода-вывода
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/print/Doc.html