Spec-Zone.ru › OpenJDK 17

Интерфейс MultiDoc

public interface MultiDoc
Интерфейс MultiDoc определяет интерфейс для объекта, который предоставляет более одного фрагмента данных для печати для задания печати. "Doc" — это короткое и легко произносимое слово, означающее "фрагмент данных для печати", а "multidoc" — это группа нескольких документов. Клиент передает заданию печати объект, реализующий интерфейс MultiDoc, и задание печати вызывает методы этого объекта для получения данных для печати.

Интерфейс MultiDoc предоставляет абстракцию, аналогичную "связанному списку" документов. Объект multidoc похож на узел в связанном списке, содержащий текущий документ в списке и указатель на следующий узел (multidoc) в списке. Задание печати может вызвать метод multidoc getDoc() для получения текущего документа. Когда задание печати готово перейти к следующему документу, оно может вызвать метод multidoc next() для получения следующего multidoc, содержащего следующий документ. Поэтому код задания печати для доступа к multidoc может выглядеть так:

      void processMultiDoc(MultiDoc theMultiDoc) {

          MultiDoc current = theMultiDoc;

          while (current != null) {
              processDoc (current.getDoc());
              current = current.next();
          }
      }
 
Конечно, интерфейс MultiDoc может быть реализован любым способом, который выполняет контракт; он не обязан использовать связанный список в реализации.

Для получения всех данных для печати для задания печати multidoc прокси-сервис печати может использовать любой из двух шаблонов:

  1. Шаблон перемежающийся: Получить документ из текущего multidoc. Получить объект представления данных для печати из текущего документа. Получить все данные для печати из объекта представления данных для печати. Получить следующий multidoc из текущего multidoc и повторить до тех пор, пока не останется больше. (В примере кода выше используется перемежающийся шаблон.)
  2. Шаблон все сразу: Получить документ из текущего multidoc и сохранить документ в списке. Получить следующий multidoc из текущего multidoc и повторить до тех пор, пока не останется больше. Затем перебрать список сохраненных документов. Получить объект представления данных для печати из текущего документа. Получить все данные для печати из объекта представления данных для печати. Перейти к следующему документу в списке и повторить до тех пор, пока не останется больше.
Теперь рассмотрим клиент печати, который генерирует данные для печати на лету и не имеет ресурсов для хранения более одного фрагмента данных для печати одновременно. Если прокси-сервис печати использовал шаблон "все сразу" для получения данных для печати, это создаст проблему для такого клиента; клиенту придется хранить все данные для печати документов до тех пор, пока прокси-сервис печати не вернется и не запросит их, чего клиент не может сделать. Для работы с таким клиентом прокси-сервис печати должен использовать перемежающийся шаблон.

Для решения этой проблемы и упрощения проектирования клиентов, предоставляющих несколько документов заданию печати, каждый прокси-сервис печати, поддерживающий задания печати multidoc, обязан получить доступ к объекту MultiDoc с использованием перемежающегося шаблона. То есть, имея объект MultiDoc , прокси-сервис печати вызовет getDoc() один или несколько раз, пока не получит текущий объект Doc . Затем прокси-сервис печати получит данные для печати текущего документа, не продолжая, пока все данные для печати не будут получены или не произойдет неисправимая ошибка. Если продолжение возможно, прокси-сервис печати вызовет next() один или несколько раз, пока не получит либо следующий объект MultiDoc , либо указание о том, что больше нет. Реализация интерфейса MultiDoc может предполагать, что прокси-сервис печати будет следовать этому перемежающемуся шаблону; для любого другого шаблона использования поведение реализации MultiDoc не определено.

Нет ограничений на количество потоков клиентов, которые могут одновременно получать доступ к одному и тому же multidoc. Поэтому все реализации интерфейса MultiDoc должны быть спроектированы как безопасные для нескольких потоков. Фактически, поток клиента может добавлять документы в конец (мысленного) списка, в то время как поток задания печати одновременно получает документы с начала списка; при условии, что объект multidoc надлежащим образом синхронизирует потоки, оба потока не будут мешать друг другу.

Краткое описание методов

Модификатор и тип Метод Описание
Doc getDoc()
Получить текущий объект документа.
MultiDoc next()
Перейти к объекту multidoc, содержащему следующий объект документа в последовательности объектов документов.

Подробное описание методов

getDoc

Doc getDoc() throws IOException
Получить текущий объект документа.
Возвращает:
текущий объект документа
Выбрасывает:
IOException - если произошла ошибка при чтении документа

next

MultiDoc next() throws IOException
Перейти к объекту multidoc, содержащему следующий объект документа в последовательности объектов документов.
Возвращает:
объект multidoc, содержащий следующий объект документа, или null , если больше нет объектов документов
Выбрасывает:
IOException - если произошла ошибка при поиске следующего документа

© 1993, 2021, 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/17/docs/api/java.desktop/javax/print/MultiDoc.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API