Документация интерфейса
- Все известные реализующие классы:
SimpleDoc
public interface Doc
Doc определяет интерфейс для объекта, который предоставляет один фрагмент данных печати для задания печати. «Фрагмент» — короткое и легко произносимое слово, означающее «фрагмент данных печати». Клиент передает заданию печати объект, реализующий интерфейс Doc, и задание печати вызывает методы этого объекта для получения данных печати. Интерфейс Doc позволяет заданию печати: - Определить формат или «тип данных» (класс
DocFlavor), в котором доступны данные печати. Тип данных определяет формат данных печати (MIME-тип) и представительный класс объекта, из которого берутся данные печати. - Получить объект представления данных печати, который является экземпляром представительного класса типа данных. Затем задание печати может получить фактические данные печати из объекта представления.
- Получить атрибуты печати, которые определяют дополнительные характеристики фрагмента или определяют инструкции обработки, которые должны быть применены к фрагменту. Атрибуты печати определены в пакете
javax.print.attribute. Фрагмент возвращает свои атрибуты печати, сохраненные в набореjavax.print.attribute.DocAttributeSet.
Doc разрешено возвращать тот же самый объект каждый раз, когда метод вызывается. Это имеет последствия для задания печати или другого вызывающего объекта фрагмента, чей объект представления данных печати «потребляет» данные печати, когда вызывающий объект получает данные печати, например, объект представления данных печати, который является потоком. После того, как задание печати вызвало getPrintData() и получило поток, любые дальнейшие вызовы getPrintData() вернут тот же самый объект потока, на котором чтение, возможно, уже происходит, а не новый объект потока, который будет повторно читать данные печати с начала. Указание объекта фрагмента на такое поведение упрощает реализацию объектов фрагментов и оправдано тем, что конкретный фрагмент предназначен для передачи данных печати только одному заданию печати, а не нескольким различным заданиям печати. (Чтобы передать те же самые данные печати нескольким различным заданиям печати, необходимо создать несколько различных объектов фрагмента на основе одного и того же источника данных печати.) Интерфейс Doc обеспечивает значительную гибкость реализации. Данные печати могут уже существовать при построении объекта фрагмента. В этом случае объекты, возвращаемые методами фрагмента, могут быть предоставлены конструктору фрагмента, храниться во фрагменте заранее и просто возвращаться по запросу. В качестве альтернативы, данные печати могут ещё не существовать при построении объекта фрагмента. В этом случае объект фрагмента может предоставить «ленивую» реализацию, которая генерирует объект представления данных печати (и/или данные печати) только тогда, когда задание печати запрашивает их (когда задание печати вызывает метод getPrintData()).
Нет ограничений на количество потоков клиентов, которые могут одновременно обращаться к одному фрагменту. Поэтому все реализации интерфейса Doc должны быть разработаны для многопоточной безопасности.
Однако может быть только один потребитель данных печати, полученных от Doc.
Если данные печати получаются от клиента в виде потока, вызывая методы Doc's getReaderForText() или getStreamForBytes(), или потому что источник данных печати уже является InputStream или Reader, то служба печати должна всегда закрывать эти потоки для клиента при всех условиях завершения задания. С следующим замечанием. Если данные печати сами по себе являются потоком, служба всегда закроет его. Если данные печати — это что-то ещё, что может быть запрошено как поток, служба закроет поток только в том случае, если она получила поток до завершения. То есть, просто потому, что служба печати может запросить данные как поток, это не значит, что она это сделает, с тем, что реализаторы Doc, которые полагаются на службу для закрытия их, должны создавать такие потоки только в ответ на запрос от службы.
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
DocAttributeSet |
getAttributes() |
Получает набор атрибутов печати для этого объекта фрагмента. |
DocFlavor |
getDocFlavor() |
Определяет тип данных фрагмента, в котором этот объект фрагмента предоставит свой фрагмент данных печати. |
Object |
getPrintData() |
Получает объект представления данных печати, который содержит фрагмент данных печати этого объекта фрагмента в формате, соответствующем поддерживаемому типу данных фрагмента. |
Reader |
getReaderForText() |
Получает ридер для извлечения символьных данных печати из этого фрагмента. |
InputStream |
getStreamForBytes() |
Получает входной поток для извлечения байтовых данных печати из этого фрагмента. |
Подробное описание методов
getDocFlavor
DocFlavor getDocFlavor()
- Возвращает:
- тип данных фрагмента
getPrintData
Object getPrintData() throws IOException
getPrintData() возвращает экземпляр представительного класса, имя которого задано getDocFlavor().getRepresentationClassName(), и возвращаемое значение может быть приведено к этому представительному классу из класса Object.- Возвращает:
- объект представления данных печати
- Исключения:
-
IOException- если представительный класс является потоком и при построении потока произошла ошибка ввода-вывода
getAttributes
DocAttributeSet getAttributes()
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, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/java.desktop/javax/print/Doc.html