Spec-Zone.ru › OpenJDK 27

Класс DocFlavor

java.lang.Object
javax.print.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 можно использовать для создания произвольного формата документа.
  • Предварительно отформатированный текст
    MIME-типы и их описания
    MIME-тип Описание
    "text/plain" Обычный текст в наборе символов по умолчанию (US-ASCII)
    "text/plain; charset=xxx" Обычный текст в наборе символов xxx
    "text/html" Документ HTML в наборе символов по умолчанию (US-ASCII)
    "text/html; charset=xxx" Документ HTML в наборе символов xxx
    Обычно данные для печати в виде предварительно отформатированного текста предоставляются либо в классе представления, ориентированном на символы (массив символов, String, Reader), либо в классе представления, ориентированном на байты (массив байтов, InputStream, URL).
  • Предварительно отформатированные документы на языке описания страниц (PDL)
    MIME-типы и их описания
    MIME-тип Описание
    "application/pdf" Документ в формате Portable Document Format
    "application/postscript" Документ PostScript
    "application/vnd.hp-PCL" Документ Printer Control Language
    Обычно предварительно отформатированные данные для печати PDL предоставляются в классе представления, ориентированном на байты (массив байтов, 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")
Экземпляр Java Print Service может поддерживать любые другие форматы документов (или не поддерживать их вовсе) дополнительно к перечисленным обязательным форматам — по выбору реализации.

Поддержка указанных выше форматов документов желательна, чтобы клиент печати мог рассчитывать на возможность печати на любом принтере 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.
  1. API JPS предназначен для использования в профилях Java, не поддерживающих AWT.
  2. Реализация класса java.awt.datatransfer.DataFlavor не гарантирует, что эквивалентные форматы данных будут иметь одинаковое сериализованное представление. DocFlavor это гарантирует и может использоваться в службах, которым это необходимо.
  3. Реализация класса java.awt.datatransfer.DataFlavor включает человекочитаемое имя в сериализованное представление. Это неуместно для использования в качестве ограничения при сопоставлении служб.
Сериализованное представление класса DocFlavor использует следующую каноническую форму строки MIME-типа. Таким образом, два формата документов с MIME-типами, которые не идентичны, но эквивалентны (имеют одинаковую каноническую форму), могут считаться равными.
  • Тип мультимедиа, подтип мультимедиа и параметры сохраняются, но все комментарии и пробельные символы удаляются.
  • Тип мультимедиа, подтип мультимедиа и имена параметров переводятся в нижний регистр.
  • Значения параметров сохраняют исходный регистр, за исключением значения параметра charset для текстового типа мультимедиа, которое переводится в нижний регистр.
  • Кавычки, окружающие значения параметров, удаляются.
  • Экранирование обратной косой черты внутри значений параметров удаляется.
  • Параметры располагаются в порядке возрастания имён.
Сериализованное представление класса DocFlavor также содержит полное имя класса представления (объекта String), а не сам класс представления (объект Class). Это позволяет клиенту проверить, какие форматы документов поддерживает экземпляр Java Print Service, не загружая классы представления, что может быть проблематично для клиентов с ограниченными ресурсами.
Внешние спецификации
  • RFC 2045: Расширения многоцелевой интернет-почты (MIME), часть первая: формат тела интернет-сообщений
  • RFC 2046: Расширения многоцелевой интернет-почты (MIME), часть вторая: типы мультимедиа
См. также:
  • Сериализованное представление

Краткое описание вложенных классов

Модификатор и тип Класс Описание
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(String mimeType, String className)
Создаёт новый объект формата документа из указанного MIME-типа и имени класса представления.

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

Модификатор и тип Метод Описание
boolean equals(Object obj)
Определяет, равен ли этот объект формата документа указанному объекту.
String getMediaSubtype()
Возвращает подтип мультимедиа этого объекта формата документа (из MIME-типа).
String getMediaType()
Возвращает тип мультимедиа этого объекта формата документа (из MIME-типа).
String getMimeType()
Возвращает строку MIME-типа этого объекта формата документа в канонической форме.
String getParameter(String paramName)
Возвращает 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(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно вследствие вызова notify или прерывания, либо до истечения заданного промежутка реального времени.

Подробное описание полей

hostEncoding

public static final String hostEncoding
Строка, представляющая кодировку операционной системы хоста. Она будет соответствовать соглашениям, описанным в RFC 2278: процедуры регистрации наборов символов IANA, за исключением случаев, когда для совместимости с предыдущими версиями платформы Java возвращаются исторические названия. Значение, возвращаемое методом, действительно только для виртуальной машины, которая его возвращает, и предназначено для использования в DocFlavor. Это набор символов для всех предопределённых DocFlavors "HOST" в выполняющейся виртуальной машине.
Внешние спецификации
  • RFC 2278: процедуры регистрации наборов символов IANA

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

DocFlavor

public DocFlavor(String mimeType, String className)
Создаёт новый объект типа документа из заданного типа MIME и имени класса представления. Заданный тип MIME преобразуется в каноническую форму и сохраняется внутри объекта.
Параметры:
mimeType — строка типа MIME
className — полное имя класса представления
Исключения:
NullPointerException — если mimeType или className равно null
IllegalArgumentException — если mimeType не соответствует синтаксису строки типа MIME

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

getMimeType

public String getMimeType()
Возвращает строку типа MIME этого объекта типа документа в канонической форме. Значение каждого параметра заключается в кавычки.
Возвращает:
тип MIME

getMediaType

public String getMediaType()
Возвращает тип медиаданных этого объекта типа документа (из типа MIME).
Возвращает:
тип медиаданных

getMediaSubtype

public String getMediaSubtype()
Возвращает подтип медиаданных этого объекта типа документа (из типа MIME).
Возвращает:
подтип медиаданных

getParameter

public String getParameter(String paramName)
Возвращает String, представляющую параметр MIME. Типы MIME могут включать параметры, которые обычно являются необязательными. Набор символов для текстовых типов — распространённый полезный пример. Этот вспомогательный метод возвращает значение указанного параметра, если он задан в типе MIME для этого типа документа.
Параметры:
paramName — имя параметра. Перед сравнением это имя преобразуется во внутренний канонический формат нижнего регистра.
Возвращает:
строку, представляющую параметр MIME, или null, если этот параметр отсутствует в строке типа MIME
Исключения:
NullPointerException — если paramName равно null

getRepresentationClassName

public String getRepresentationClassName()
Возвращает имя класса представления этого объекта типа документа.
Возвращает:
имя класса представления

toString

public String toString()
Преобразует этот DocFlavor в строку.
Переопределяет:
toString в классе Object
Возвращает:
строку типа MIME в канонической форме. Значение каждого параметра заключается в кавычки. К строке типа MIME добавляется параметр "class=", указывающий имя класса представления.

hashCode

public int hashCode()
Возвращает хеш-код этого объекта типа документа.
Переопределяет:
hashCode в классе Object
Возвращает:
значение хеш-кода для этого объекта
См. также:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(Object)

equals

public boolean equals(Object obj)
Определяет, равен ли этот объект типа документа заданному объекту. Объекты равны, если заданный объект не является null, является экземпляром DocFlavor, имеет тип MIME, эквивалентный типу MIME этого объекта типа документа (то есть типы MIME имеют одинаковые тип медиаданных, подтип медиаданных и параметры), а также имеет то же имя класса представления, что и этот объект типа документа. Таким образом, если типы MIME двух объектов типа документа совпадают за исключением комментариев, они считаются равными. Однако два объекта типа документа с типами MIME "text/plain" и "text/plain; charset=US-ASCII" не считаются равными, хотя они представляют один и тот же тип медиаданных (поскольку набор символов по умолчанию для обычного текста — US-ASCII).
Переопределяет:
equals в классе Object
Параметры:
obj — Object для сравнения
Возвращает:
true, если этот объект типа документа равен obj, и false в противном случае
См. также:
  • Object.hashCode()
  • HashMap

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2026, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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