Класс DocFlavor
- Все реализуемые интерфейсы:
Serializable, Cloneable
- Непосредственные известные подклассы:
DocFlavor.BYTE_ARRAY, DocFlavor.CHAR_ARRAY, DocFlavor.INPUT_STREAM, DocFlavor.READER, DocFlavor.SERVICE_FORMATTED, DocFlavor.STRING, DocFlavor.URL
public class DocFlavor extends Object implements Serializable, Cloneable
DocFlavor инкапсулирует объект, задающий формат, в котором данные для печати передаются в DocPrintJob. «Doc» — это короткий, легко произносимый термин, означающий «часть данных для печати». Формат данных для печати, или «формат документа», состоит из двух частей: - MIME-тип. Это тип мультимедиа Multipurpose Internet Mail Extensions (MIME), определённый в RFC 2045 и RFC 2046, который задаёт способ интерпретации данных для печати. Для текстовых данных следует использовать предпочтительное имя набора символов IANA MIME или его каноническое имя, если предпочтительное имя не указано. Кроме того, могут распознаваться несколько исторических имён, поддерживаемых более ранними версиями платформы Java. Дополнительные сведения о кодировках символов, поддерживаемых на платформе Java, см. в разделе кодировки символов.
-
Имя класса представления. Оно задаёт полное имя класса объекта, из которого поступают собственно данные для печати, возвращаемое методом
Class.getName(). (Таким образом, имя класса дляbyte[]—"[B", а дляchar[]—"[C".)
DocPrintJob получает данные для печати с помощью интерфейса Doc. Объект Doc позволяет DocPrintJob определить формат документа, который может предоставить клиент. Объект Doc также позволяет DocPrintJob получить экземпляр класса представления формата документа, из которого DocPrintJob затем получает собственно данные для печати. Данные для печати, форматируемые клиентом
Существует две основные категории данных для печати: данные, форматируемые клиентом, и данные, форматируемые службой. Для данных для печати, форматируемых клиентом, клиент определяет формат данных или знает его. Например, у клиента может быть изображение в формате JPEG, URL для HTML-кода или файл на диске с обычным текстом в некоторой кодировке, возможно полученный из внешнего источника, и ему необходим способ сообщить службе печати формат этих данных.
Класс представления формата документа служит каналом, через который JPS DocPrintJob получает от клиента последовательность символов или байтов. MIME-тип формата документа относится к стандартным типам мультимедиа, указывающим, как интерпретировать эту последовательность символов или байтов. Список стандартных типов мультимедиа см. в каталоге типов мультимедиа Управления по присвоению номеров в Интернете (IANA). Интерфейс Doc предоставляет две служебные операции — getReaderForText и getStreamForBytes(), — помогающие клиенту объекта Doc извлекать данные для печати, форматируемые клиентом.
Для данных для печати, форматируемых клиентом, класс представления данных для печати обычно относится к одному из следующих типов (хотя допускаются и другие классы представления):
- Массив символов (
char[]) — данные для печати состоят из символов Unicode в массиве. -
String— данные для печати состоят из символов Unicode в строке. - Поток символов (
java.io.Reader) — данные для печати состоят из символов Unicode, считываемых из потока до его конца. - Массив байтов (
byte[]) — данные для печати состоят из байтов в массиве. Байты закодированы с использованием набора символов, указанного в MIME-типе формата документа. Если MIME-тип не указывает набор символов, по умолчанию используется US-ASCII. - Поток байтов (
java.io.InputStream) — данные для печати состоят из байтов, считываемых из потока до его конца. Байты закодированы с использованием набора символов, указанного в MIME-типе формата документа. Если MIME-тип не указывает набор символов, по умолчанию используется US-ASCII. - Унифицированный указатель ресурса (
URL) — данные для печати состоят из байтов, считываемых по адресу URL. Байты закодированы с использованием набора символов, указанного в MIME-типе формата документа. Если MIME-тип не указывает набор символов, по умолчанию используется US-ASCII. Если класс представления —URL, служба печати самостоятельно обращается к документу и загружает его непосредственно по адресуURL, не привлекая клиента. Служба может быть сетевой службой печати, работающей в другой среде. Поэтому для печати документа по адресуURLс ограниченным доступом, который виден клиенту, но недоступен принтеру, не следует использовать формат данных для печатиURL. Также не следует использовать формат данных для печатиURLдля печати документа, сохранённого в локальном файле, который недоступен по адресуURLнезависимо от клиента. Например, это может быть файл, не размещённый на HTTP- или FTP-сервере. Чтобы распечатать такие документы, клиенту следует открыть входной поток дляURLили файла и использовать формат данных с входным потоком.
Кодировки по умолчанию и кодировки платформы
Для байтовых данных для печати, MIME-тип формата документа которых не содержит параметрcharset, экземпляр Java Print Service по умолчанию предполагает набор символов US-ASCII. Это соответствует RFC 2046, согласно которому набор символов по умолчанию — US-ASCII. Обратите внимание: US-ASCII является подмножеством UTF-8, поэтому в будущем этот набор может быть расширен, если новая версия RFC утвердит UTF-8 в качестве значения по умолчанию совместимым образом. Также следует учитывать, что это отличается от поведения среды выполнения Java при интерпретации потока байтов как текстовых данных. В этом случае предполагается кодировка по умолчанию для локали пользователя. Поэтому при передаче файла в локальной кодировке в Java Print Service важно правильно указать кодировку. Разработчикам, работающим в англоязычных локалях, следует уделить этому особое внимание, поскольку кодировка их платформы совпадает с MIME-набором символов по умолчанию. Благодаря этому совпадению в данном конкретном случае данные платформы могут обрабатываться правильно и без указания кодировки.
Для каждого экземпляра виртуальной машины Java при её запуске определяется кодировка символов по умолчанию, обычно зависящая от локали и набора символов, используемых операционной системой. В распределённой среде нет гарантии, что две виртуальные машины используют одинаковую кодировку по умолчанию. Поэтому клиенты, передающие текстовые данные в кодировке платформы с хост-платформы в экземпляр Java Print Service, должны явно указывать набор символов, а не полагаться на значения по умолчанию.
Предпочтительно использовать официальное основное имя кодировки, присвоенное IANA. Приложения, передающие текстовые данные, всегда должны указывать набор символов в MIME-типе; для этого необходимо получить кодировку хост-платформы для данных (например, файлов), сохранённых в кодировке этой платформы. CharSet, соответствующее этому требованию и пригодное для использования в MIME-типе для DocFlavor, можно получить с помощью DocFlavor.hostEncoding. Это имя не всегда является основным именем IANA, но гарантированно распознаётся данной виртуальной машиной. Для распространённых форматов можно использовать предопределённые значения *HOST DocFlavors.
Дополнительные сведения о кодировках символов, поддерживаемых на платформе Java, см. в разделе кодировки символов.
Рекомендуемые форматы документов
API Java Print Service не определяет форматыDocFlavors, обязательные для поддержки. Однако ниже приведены примеры MIME-типов, которые может поддерживать экземпляр Java Print Service для данных для печати, форматируемых клиентом. Вложенные классы класса DocFlavor объявляют предопределённые статические константы-объекты DocFlavor для этих примеров форматов документов; конструктор класса DocFlavor можно использовать для создания произвольного формата документа. - Предварительно отформатированный текст
Обычно данные для печати в виде предварительно отформатированного текста предоставляются либо в классе представления, ориентированном на символы (массив символов, String, Reader), либо в классе представления, ориентированном на байты (массив байтов, InputStream, URL).MIME-типы и их описания MIME-тип Описание "text/plain"Обычный текст в наборе символов по умолчанию (US-ASCII) "text/plain; charset=xxx"Обычный текст в наборе символов xxx "text/html"Документ HTML в наборе символов по умолчанию (US-ASCII) "text/html; charset=xxx"Документ HTML в наборе символов xxx - Предварительно отформатированные документы на языке описания страниц (PDL)
Обычно предварительно отформатированные данные для печати PDL предоставляются в классе представления, ориентированном на байты (массив байтов,MIME-типы и их описания MIME-тип Описание "application/pdf"Документ в формате Portable Document Format "application/postscript"Документ PostScript "application/vnd.hp-PCL"Документ Printer Control Language InputStream,URL). - Предварительно отформатированные изображения
Обычно предварительно отформатированные данные для печати в виде изображения предоставляются в классе представления, ориентированном на байты (массив байтов,MIME-типы и их описания MIME-тип Описание "image/gif"Изображение Graphics Interchange Format "image/jpeg"Изображение Joint Photographic Experts Group "image/png"Изображение Portable Network Graphics InputStream,URL). - Предварительно отформатированные данные для печати с автоматическим определением формата
Принтер самостоятельно определяет, как интерпретировать данные для печати; способ такого «автоматического определения» зависит от реализации. Обычно такие предварительно отформатированные данные предоставляются в классе представления, ориентированном на байты (массив байтов,MIME-типы и их описания MIME-тип Описание "application/octet-stream"Формат данных для печати не задан (только поток октетов) InputStream,URL).
Данные для печати, форматируемые службой
Для данных для печати, форматируемых службой формат данных определяет экземпляр Java Print Service. Класс представления формата документа обозначает интерфейс, методы которогоDocPrintJob вызывает для определения содержимого, которое необходимо напечатать, например интерфейс визуализируемого изображения или интерфейс Java Printable. MIME-тип формата документа имеет специальное значение "application/x-java-jvm-local-objectref", указывающее, что клиент предоставит ссылку на объект Java, реализующий интерфейс, имя которого указано в качестве класса представления. Этот MIME-тип служит лишь заполнителем; важен класс представления данных для печати. Для данных для печати, форматируемых службой, класс представления данных для печати обычно относится к одному из следующих типов (хотя допускаются и другие классы представления). Вложенные классы класса DocFlavor объявляют предопределённые статические константы-объекты DocFlavor для этих примеров форматов документов; конструктор класса DocFlavor можно использовать для создания произвольного формата документа.
- Объект визуализируемого изображения — клиент предоставляет объект, реализующий интерфейс
RenderableImage. Принтер вызывает методы этого интерфейса, чтобы получить изображение для печати. - Объект Printable — клиент предоставляет объект, реализующий интерфейс
Printable. Принтер последовательно вызывает методы этого интерфейса, чтобы получить страницы для печати. Для каждой страницы принтер предоставляет графический контекст, и всё, что клиент рисует в этом графическом контексте, отправляется на печать. - Объект Pageable — клиент предоставляет объект, реализующий интерфейс
Pageable. Принтер последовательно вызывает методы этого интерфейса, чтобы получить страницы для печати. Для каждой страницы принтер предоставляет графический контекст, и всё, что клиент рисует в этом графическом контексте, отправляется на печать.
Предопределённые форматы документов
Экземпляр Java Print Service не обязан поддерживать следующие форматы данных для печати и классы представления данных для печати. Разработчик, использующий этот класс, ни в коем случае не должен предполагать, что определённая служба печати поддерживает типы документов, соответствующие этим предопределённым форматам. Всегда запрашивайте у службы печати список поддерживаемых форматов документов. Однако разработчикам, использующим службы печати с поддержкой этих форматов, рекомендуется обращаться к предопределённым одиночным экземплярам, созданным здесь.- Данные в виде обычного текста, предоставляемые через поток байтов. В частности, рекомендуется поддерживать следующие форматы документов:
·("text/plain", "java.io.InputStream")
·("text/plain; charset=us-ascii", "java.io.InputStream")
·("text/plain; charset=utf-8", "java.io.InputStream") - Объекты визуализируемых изображений. В частности, рекомендуется поддерживать следующий формат документа:
·("application/x-java-jvm-local-objectref", "java.awt.image.renderable.RenderableImage")
Поддержка указанных выше форматов документов желательна, чтобы клиент печати мог рассчитывать на возможность печати на любом принтере JPS независимо от поддерживаемых им форматов документов. Если принтер не поддерживает предпочтительный формат клиента, клиент может хотя бы напечатать обычный текст или преобразовать свои данные в визуализируемое изображение и напечатать его.
Кроме того, каждый экземпляр Java Print Service должен выполнять следующие требования при обработке данных для печати в виде обычного текста:
- Пара символов «возврат каретки — перевод строки» (CR-LF) означает «перейти к столбцу 1 следующей строки».
- Символ возврата каретки (CR), используемый отдельно, означает «перейти к столбцу 1 следующей строки».
- Символ перевода строки (LF), используемый отдельно, означает «перейти к столбцу 1 следующей строки».
Обоснование проектных решений
КлассDocFlavor в пакете javax.print похож на класс DataFlavor. Класс DataFlavor не используется в API Java Print Service (JPS) по трём причинам, связанным с тем, что API JPS должен быть доступен и другим API служб печати, которым может потребоваться работать в профилях Java, не включающих всю платформу Java, Standard Edition. - API JPS предназначен для использования в профилях Java, не поддерживающих AWT.
- Реализация класса
java.awt.datatransfer.DataFlavorне гарантирует, что эквивалентные форматы данных будут иметь одинаковое сериализованное представление.DocFlavorэто гарантирует и может использоваться в службах, которым это необходимо. - Реализация класса
java.awt.datatransfer.DataFlavorвключает человекочитаемое имя в сериализованное представление. Это неуместно для использования в качестве ограничения при сопоставлении служб.
DocFlavor использует следующую каноническую форму строки MIME-типа. Таким образом, два формата документов с MIME-типами, которые не идентичны, но эквивалентны (имеют одинаковую каноническую форму), могут считаться равными. - Тип мультимедиа, подтип мультимедиа и параметры сохраняются, но все комментарии и пробельные символы удаляются.
- Тип мультимедиа, подтип мультимедиа и имена параметров переводятся в нижний регистр.
- Значения параметров сохраняют исходный регистр, за исключением значения параметра charset для текстового типа мультимедиа, которое переводится в нижний регистр.
- Кавычки, окружающие значения параметров, удаляются.
- Экранирование обратной косой черты внутри значений параметров удаляется.
- Параметры располагаются в порядке возрастания имён.
DocFlavor также содержит полное имя класса представления (объекта String), а не сам класс представления (объект Class). Это позволяет клиенту проверить, какие форматы документов поддерживает экземпляр Java Print Service, не загружая классы представления, что может быть проблематично для клиентов с ограниченными ресурсами.- Внешние спецификации
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static class |
DocFlavor.BYTE_ARRAY |
Класс DocFlavor.BYTE_ARRAY предоставляет предопределённые статические константы-объекты DocFlavor для примеров форматов документов, в которых в качестве класса представления данных для печати используется массив байтов (byte[]). |
static class |
DocFlavor.CHAR_ARRAY |
Класс DocFlavor.CHAR_ARRAY предоставляет предопределённые статические константы-объекты DocFlavor для примеров форматов документов, в которых в качестве класса представления данных для печати используется массив символов (char[]). |
static class |
DocFlavor.INPUT_STREAM |
Класс DocFlavor.INPUT_STREAM предоставляет предопределённые статические константы-объекты DocFlavor для примеров форматов документов, в которых в качестве класса представления данных для печати используется поток байтов (java.io.InputStream). |
static class |
DocFlavor.READER |
Класс DocFlavor.READER предоставляет предопределённые статические константы-объекты DocFlavor для примеров форматов документов, в которых в качестве класса представления данных для печати используется поток символов (java.io.Reader). |
static class |
DocFlavor.SERVICE_FORMATTED |
Класс DocFlavor.SERVICE_FORMATTED предоставляет предопределённые статические константы-объекты DocFlavor для примеров форматов документов с данными для печати, форматируемыми службой. |
static class |
DocFlavor.STRING |
Класс DocFlavor.STRING предоставляет предопределённые статические константы-объекты DocFlavor для примеров форматов документов, в которых в качестве класса представления данных для печати используется строка (java.lang.String). |
static class |
DocFlavor.URL |
Класс DocFlavor.URL предоставляет предопределённые статические константы-объекты DocFlavor. |
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final String |
hostEncoding |
Строка, представляющая кодировку операционной системы хоста. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
DocFlavor |
Создаёт новый объект формата документа из указанного MIME-типа и имени класса представления. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Определяет, равен ли этот объект формата документа указанному объекту. |
String |
getMediaSubtype() |
Возвращает подтип мультимедиа этого объекта формата документа (из MIME-типа). |
String |
getMediaType() |
Возвращает тип мультимедиа этого объекта формата документа (из MIME-типа). |
String |
getMimeType() |
Возвращает строку MIME-типа этого объекта формата документа в канонической форме. |
String |
getParameter |
Возвращает String, представляющий параметр MIME. |
String |
getRepresentationClassName() |
Возвращает имя класса представления этого объекта формата документа. |
int |
hashCode() |
Возвращает хеш-код этого объекта формата документа. |
String |
toString() |
Преобразует этот DocFlavor в строку. |
Методы, объявленные в классе Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API подлежит удалению в будущей версии. Финализация устарела и подлежит удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или прерывания. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или прерывания, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или прерывания, либо до истечения заданного промежутка реального времени. |
Подробное описание полей
hostEncoding
public static final String hostEncoding
DocFlavor. Это набор символов для всех предопределённых DocFlavors "HOST" в выполняющейся виртуальной машине.- Внешние спецификации
Подробное описание конструкторов
DocFlavor
public DocFlavor(String mimeType, String className)
- Параметры:
-
mimeType— строка типа MIME -
className— полное имя класса представления - Исключения:
-
NullPointerException— еслиmimeTypeилиclassNameравноnull -
IllegalArgumentException— еслиmimeTypeне соответствует синтаксису строки типа MIME
Подробное описание методов
getMimeType
public String getMimeType()
- Возвращает:
- тип MIME
getMediaType
public String getMediaType()
- Возвращает:
- тип медиаданных
getMediaSubtype
public String getMediaSubtype()
- Возвращает:
- подтип медиаданных
getParameter
public String getParameter(String paramName)
String, представляющую параметр MIME. Типы MIME могут включать параметры, которые обычно являются необязательными. Набор символов для текстовых типов — распространённый полезный пример. Этот вспомогательный метод возвращает значение указанного параметра, если он задан в типе MIME для этого типа документа.- Параметры:
-
paramName— имя параметра. Перед сравнением это имя преобразуется во внутренний канонический формат нижнего регистра. - Возвращает:
- строку, представляющую параметр MIME, или
null, если этот параметр отсутствует в строке типа MIME - Исключения:
-
NullPointerException— если paramName равноnull
getRepresentationClassName
public String getRepresentationClassName()
- Возвращает:
- имя класса представления
toString
hashCode
equals
public boolean equals(Object obj)
null, является экземпляром DocFlavor, имеет тип MIME, эквивалентный типу MIME этого объекта типа документа (то есть типы MIME имеют одинаковые тип медиаданных, подтип медиаданных и параметры), а также имеет то же имя класса представления, что и этот объект типа документа. Таким образом, если типы MIME двух объектов типа документа совпадают за исключением комментариев, они считаются равными. Однако два объекта типа документа с типами MIME "text/plain" и "text/plain; charset=US-ASCII" не считаются равными, хотя они представляют один и тот же тип медиаданных (поскольку набор символов по умолчанию для обычного текста — US-ASCII).
© 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.