Spec-Zone .ru
спецификации, руководства, описания, API
 Платформа Java™
Стандарт Эд. 7

Пакет javax.print.attribute

Обеспечивает классы и интерфейсы, которые описывают типы атрибутов Службы печати JavaTM и как они могут быть собраны в наборы атрибута.

См.: Описание

Пакет javax.print.attribute Описание

Обеспечивает классы и интерфейсы, которые описывают типы атрибутов Службы печати JavaTM и как они могут быть собраны в наборы атрибута.

Каков Атрибут?

Устанавливая задание печати, клиент определяет две вещи: данные печати и инструкции обработки. Данные печати являются фактическим контентом, который будет напечатан. Инструкции обработки говорят принтер, как напечатать данные печати, такие как: какие носители использовать, сколько копий, чтобы напечатать, и напечатать ли на одном или обеих сторонах листа. Клиент определяет эти инструкции обработки с определениями атрибута API Службы печати Java.

Данные печати и инструкции обработки являются отдельными объектами. Это означает что:

Инструкция обработки не определяет, как задание печати обрабатывает запрос; каждая инструкция обработки является только описанием результатов задания печати. Задание печати определяет способ, которым оно достигает результатов, определенных инструкциями обработки. Представление обработки инструкций как дескриптивные элементы обеспечивает больше гибкости для того, чтобы оно реализовало задания печати.

Категории атрибута и Значения

У каждого принтера есть ряд возможностей, таких как возможность напечатать на различных форматах бумаги или возможности напечатать больше чем одну копию. У каждой из возможностей есть диапазон значений. Например, у возможности ориентации принтера мог бы быть этот диапазон значений: [среда, портрет]. Для каждого запроса печати возможность устанавливается в одно из этих значений. API Службы печати Java использует категорию атрибута термина, чтобы послать к возможности принтера и термину значение атрибута обратиться к значению возможности.

В API Службы печати Java категория атрибута представляется классом Java, реализовывая интерфейс Атрибута. Значения атрибута являются экземплярами такого класса или одним из его подклассов. Например, чтобы определить число копий, приложение создает экземпляр класса Копий с числом требуемых копий и использует Copies экземпляр как часть запроса печати. В этом случае, Copies класс представляет категорию атрибута, и Copies экземпляр представляет значение атрибута.

Роли атрибута

Представляя задание печати принтеру, клиент обеспечивает атрибуты, описывающие характеристики данных печати, такие как название документа, и как данные печати должны быть напечатаны, такой как двусторонние, пять копий. Если задание печати состоит из многократных частей данных печати, у различных частей могли бы быть различные инструкции обработки, такие как 8 x 11-дюймовых носителей для первого документа, и 11 x 17-дюймовых носителей для другого документа.

Как только принтер начинает обрабатывать задание печати, дополнительная информация о задании становится доступной, который мог бы включать: состояние задания (такой как завершено или поставлено в очередь) и число страниц, напечатанных до сих пор. Эти сведения являются также атрибутами. Атрибуты могут также описать принтер непосредственно, такой как: имя принтера, расположение принтера, и число заданий поставлены в очередь.

API Службы печати Java определяет эти различные виды атрибутов с пятью подынтерфейсами Attribute:

Каждый класс атрибута реализует один или больше этих подынтерфейсов тегирования, чтобы указать, где атрибут может использоваться в API. Если класс атрибута реализует многократные подынтерфейсы тегирования, атрибут может использоваться в многократных контекстах. Например, атрибут носителей может примениться к одному документу на задании печати как a DocAttribute или ко всему заданию печати как a PrintRequestAttribute. Определенные низкоуровневые атрибуты никогда не используются самостоятельно, но всегда агрегированы в высокоуровневые атрибуты. Эти низкоуровневые классы атрибута только реализуют интерфейсный Атрибут, не любой из подынтерфейсов тегирования.

API Службы печати Java определяет группу стандартных классов атрибута, смоделированных на атрибуты в интернет-Протоколе Печати (IPP) версия 1.1. Стандартные классы атрибута находятся в подпакете javax.print.attribute.standard, чтобы сохранить фактические классы атрибута, концептуально отделяются от универсального аппарата, определенного в пакете javax.print.attribute.

Наборы атрибута

Клиент обычно должен обеспечивать больше чем одну инструкцию обработки, представляя задание печати. Например, клиент, возможно, должен был бы определить размер носителей A4 и альбомной ориентации. Чтобы отправить больше чем одну инструкцию обработки, клиент собирает атрибуты в набор атрибута, который API Службы печати Java представляет с интерфейсом AttributeSet.

AttributeSet интерфейс подобен интерфейсу Карты: это обеспечивает карту ключа к значениям, в которых каждый ключ уникален и может содержать не больше, чем одно значение. Однако, AttributeSet интерфейс разрабатывается, чтобы определенно поддерживать потребности API Службы печати Java. AttributeSet требует что:

  1. Каждый ключ AttributeSet соответствует категории, и значение ключа может только быть одним из значений атрибута, которые принадлежат категории, представленной ключом. Таким образом, в отличие от a Map, AttributeSet ограничивает возможные значения ключа: категория атрибута не может быть установлена в значение атрибута, которое не принадлежит той категории.
  2. Никакие два атрибута от той же самой категории не могут существовать в том же самом наборе. Например, набор атрибута не должен содержать и "односторонний" атрибут и "двухсторонний" атрибут, потому что эти два атрибута дают принтеру конфликтные инструкции.
  3. Только атрибуты реализовывая Attribute интерфейс может быть добавлен к набору.

javax.print.attribute пакет включает HashAttributeSet как конкретную реализацию интерфейса набора атрибута. HashAttributeSet обеспечивает набор атрибута, основанный на карте хеша. Можно использовать эту реализацию или обеспечить Вашу собственную реализацию интерфейса AttributeSet.

API Службы печати Java обеспечивает четыре специализации набора атрибута, которые ограничиваются, чтобы содержать только один из четырех видов атрибутов, как обсуждено в Роли атрибутаразделе :

Заметьте, что только четыре вида наборов атрибута перечисляются здесь, но есть пять видов атрибутов. Интерфейсный SupportedValuesAttribute обозначает атрибут, который дает поддерживаемые значения для другого атрибута. Атрибуты поддерживаемых значений никогда не агрегированы в наборы атрибута, таким образом нет никакого подынтерфейса набора атрибута, определенного для них.

В некоторых контекстах набор атрибута только для чтения, что означает, что клиенту только разрешают исследовать атрибут содержание набора, но не изменить их. В других контекстах набор атрибута является чтением-записью, что означает, что клиенту разрешают и исследовать и изменить атрибут содержание набора. Для набора атрибута "только для чтения", вызывая видоизменяющуюся работу броски UnmodifiableSetException.

Пакет javax.print.attribute включает одну конкретную реализацию каждого из подынтерфейсов набора атрибута:

Все эти классы расширяют HashAttributeSet и осуществляют ограничение, что набору атрибута только позволяют содержать соответствующий вид атрибута.

Проект Класса атрибута

Значение атрибута является небольшим, атомарным элементом данных, таким как целое число или перечисляемое значение. API Службы печати Java не использует примитивные типы данных, такие как интервал, чтобы представить значения атрибута по этим причинам: Для безопасности типов и представлять все атрибуты однородно, API Службы печати Java определяет каждую категорию атрибута как класс, такой как класс Copies, Стороны класса, и класс PrinterResolution. Каждый класс атрибута обертывает один или более примитивных элементов данных, содержащих значение атрибута. Операции присвоения атрибута выполняют частые сравнения между объектами категории атрибута, добавляя атрибуты, находя существующие атрибуты в той же самой категории, и ища атрибут, данный его категорию. Поскольку категория атрибута представляется классом, быстрые сравнения значения атрибута могут быть выполнены с Class.equals метод.

Даже при том, что API Службы печати Java включает большое количество различных категорий атрибута, есть только несколько различных типов значений атрибута. Большинство атрибутов может быть представлено небольшим количеством типов данных, таких как: целочисленные значения, целочисленные диапазоны, текст, или перечисление целочисленных значений. Тип значения атрибута, которое принимает категория, вызывают абстрактным синтаксисом атрибута. Чтобы обеспечить непротиворечивость и уменьшить дублирование кода, API Службы печати Java определяет классы абстрактного синтаксиса, чтобы представить каждый абстрактный синтаксис, и эти классы используются в качестве родителя стандартных атрибутов когда бы ни было возможно. Классы абстрактного синтаксиса:

Классы абстрактного синтаксиса независимы от атрибутов, которые используют их. Фактически, приложения, которые не имеют никакого отношения к печати, могут использовать классы абстрактного синтаксиса. Хотя большинство стандартных классов атрибута расширяет один из классов абстрактного синтаксиса, никакой класс атрибута не обязан расширять один из этих классов. Классы абстрактного синтаксиса просто обеспечивают удобную реализацию, которая может быть совместно использована многими классами атрибута.

Каждый класс атрибута реализует Attribute интерфейс, любой прямо или косвенно, чтобы отметить это как атрибут печати. Класс атрибута, который может появиться в ограниченных наборах атрибута в определенных контекстах также, реализует один или более подынтерфейсов Attribute. Большинство классов атрибута также расширяет соответствующий класс абстрактного синтаксиса, чтобы получить реализацию. Рассмотрите Sides класс атрибута:

public class Sides extends EnumSyntax implements DocAttribute, PrintRequestAttribute, PrintJobAttribute { public final Object getCategory() { return Sides.class; } ... }

Начиная с каждого класса атрибута реализации Attribute, каждый класс атрибута должен обеспечить реализацию для getCategory метод, который возвращает категорию атрибута. В случае Sides, getCategory возвраты метода Sides.class. getCategory метод является заключительным, чтобы гарантировать, что любые определенные поставщиком подклассы стандартного класса атрибута появляются в той же самой категории. Каждый объект атрибута является неизменным когда-то созданный так, чтобы ссылки на объект атрибута могли быть розданы свободно. Чтобы получить различное значение атрибута, создайте различный объект атрибута.

Поставщики атрибута

API Службы печати Java разрабатывается так, чтобы поставщики могли: Чтобы определить новое значение для атрибута, клиент может создать экземпляры таких атрибутов с произвольными значениями во время выполнения. Однако, перечислимый атрибут, используя класс абстрактного синтаксиса EnumSyntax определяет все возможные значения атрибута во время компиляции как одноэлементные экземпляры класса атрибута. Это означает, что новые перечисляемые значения не могут быть созданы во время выполнения. Чтобы определить новые специфичные для поставщика значения для стандарта перечисленный атрибут, поставщик должен определить новый класс атрибута, определяющий новые одноэлементные экземпляры. Гарантировать, что новое падение значений атрибута той же самой категории как стандартные значения атрибута, новый класс атрибута должен быть подклассом стандартного класса атрибута.

Чтобы определить новую категорию атрибута, поставщик определяет новый класс атрибута. Этот класс атрибута, как стандартные классы атрибута, реализации Attribute или один из его подынтерфейсов и расширяет класс абстрактного синтаксиса. Поставщик может или использовать существующий класс абстрактного синтаксиса или определить новый. Новый определенный поставщиком атрибут может использоваться везде, где Attribute используется, такой как в AttributeSet.

Используя Атрибуты

Типичное приложение печати использует PrintRequestAttributeSet потому что атрибуты запроса печати являются типами атрибутов, которые обычно определяет клиент. Этот пример демонстрирует, как создавать набор атрибута атрибутов запроса печати и определять местоположение принтера, который может напечатать документ согласно указанным атрибутам:

FileInputStream psStream; try { psstream = new FileInputStream("file.ps"); } catch (FileNotFoundException ffne) { } if (psstream == null) { return; } //Set the document type. See the DocFlavor documentation for //more information. DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT; Doc myDoc = new SimpleDoc(pstream, psInFormat, null); PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); aset.add(new Copies(5)); aset.add(MediaSize.A4); aset.add(Sides.DUPLEX); PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset); if (services.length > 0) { DocPrintJob job = services[0].createPrintJob(); try { job.print(myDoc, aset); } catch (PrintException pe) {} }

Пожалуйста, отметьте: В javax.print API нулевой ссылочный параметр к методам является неправильным если явно не задокументировано на методе как наличие значимой интерпретации. Использование наоборот является неправильным кодированием и может привести к исключению времени выполнения или сразу или в некоторое более позднее время. IllegalArgumentException и NullPointerException являются примерами типичных и приемлемых исключений времени выполнения для таких случаев.

С тех пор:
1.4
 Платформа Java™
Стандарт Эд. 7

Представьте ошибку или функцию
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.