Интерфейс MultiDoc
public interface MultiDoc
Интерфейс MultiDoc определяет интерфейс для объекта, который предоставляет более одного фрагмента данных для печати для задания печати. "Doc" — это краткое и легко произносимое слово, означающее "фрагмент данных для печати", а "multidoc" — это группа нескольких doc. Клиент передает объекту задания печати объект, реализующий интерфейс MultiDoc, и задание печати вызывает методы этого объекта для получения данных для печати.
Интерфейс MultiDoc предоставляет абстракцию, аналогичную "связанному списку" doc. Объект multidoc подобен узлу в связанном списке, содержащему текущий doc в списке и указатель на следующий узел (multidoc) в списке. Задание печати может вызвать метод multidoc getDoc(), чтобы получить текущий doc. Когда оно готово перейти к следующему doc, задание печати может вызвать метод multidoc next(), чтобы получить следующий multidoc, который содержит следующий doc. Таким образом, код задания печати для доступа к multidoc может выглядеть так:
void processMultiDoc(MultiDoc theMultiDoc) {
MultiDoc current = theMultiDoc;
while (current != null) {
processDoc (current.getDoc());
current = current.next();
}
} Конечно, интерфейс MultiDoc может быть реализован любым способом, который выполняет контракт; он не обязательно должен использовать связанный список в реализации. Чтобы получить все данные для печати для задания печати multidoc, прокси-сервис печати может использовать любой из двух шаблонов:
- Шаблон перемежающийся: Получить doc из текущего multidoc. Получить объект представления данных для печати из текущего doc. Получить все данные для печати из объекта представления данных для печати. Получить следующий multidoc из текущего multidoc и повторить до тех пор, пока не останется больше. (Приведенный выше пример кода использует перемежающийся шаблон.)
- Шаблон все сразу: Получить doc из текущего multidoc и сохранить doc в списке. Получить следующий multidoc из текущего multidoc и повторить до тех пор, пока не останется больше. Затем проитерировать по списку сохраненных doc. Получить объект представления данных для печати из текущего doc. Получить все данные для печати из объекта представления данных для печати. Перейти к следующему doc в списке и повторить до тех пор, пока не останется больше.
Для решения этой проблемы и упрощения проектирования клиентов, предоставляющих несколько doc заданию печати, каждый прокси-сервис печати, поддерживающий задания печати multidoc, обязан получить доступ к объекту MultiDoc с использованием перемежающегося шаблона. То есть, имея объект MultiDoc, прокси-сервис печати будет вызывать getDoc() один или несколько раз до тех пор, пока он успешно не получит текущий объект Doc. Прокси-сервис печати затем получит текущие данные для печати doc, не продолжая, пока все данные для печати не будут получены или не произойдет необратимая ошибка. Если он сможет продолжить, прокси-сервис печати затем вызовет next() один или несколько раз до тех пор, пока он успешно не получит следующий объект MultiDoc или указание о том, что больше нет. Реализация интерфейса MultiDoc может предполагать, что прокси-сервис печати будет следовать этому перемежающемуся шаблону; поведение реализации MultiDoc для других шаблонов использования не определено.
Нет ограничений на количество потоков клиентов, которые могут одновременно обращаться к одному и тому же multidoc. Поэтому все реализации интерфейса MultiDoc должны быть спроектированы для обеспечения многопотоковой безопасности. Фактически, поток клиента мог бы добавлять doc в конец (понятийного) списка, в то время как поток задания печати одновременно получал doc из начала списка; при условии, что объект multidoc должным образом синхронизирует потоки, два потока не будут мешать друг другу.
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
Doc |
getDoc() |
Получить текущий объект doc. |
MultiDoc |
next() |
Перейти к объекту multidoc, содержащему следующий объект doc в последовательности объектов doc. |
Методы
getDoc
Doc getDoc()
throws IOException
Получить текущий объект doc.
- Возвращает:
- текущий объект doc
- Исключения:
-
IOException- если произошла ошибка при чтении документа
next
MultiDoc next()
throws IOException
Перейти к объекту multidoc, содержащему следующий объект doc в последовательности объектов doc.
- Возвращает:
- объект multidoc, содержащий следующий объект doc, или
nullесли больше нет объектов doc - Исключения:
-
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/MultiDoc.html