java.awt.print.Printable
. Таким источникам данных для печати соответствует MIME-тип "application/x-java-jvm-local-objectref".
Для обозначения данных такого типа в англоязычной литературе используют термин "service formatted print data", а для данных стандартных MIME-типов, извлекаемых из некоторого источника,
где они уже находились в предварительно отформатированном виде используют термин "client formatted print data".javax.print.PrintService
.
Получение ссылки на этот объект производится с помощью специальных "поисковых" методов класса PrintServiceLookup
:public static PrintService lookupDefaultPrintService()
- отыскивает принтер по умолчанию, в случае если такой принтер отсутствует, возвращает null
public static PrintService[] lookupPrintServices(DocFlavor flavor,AttributeSet attributes)
- отыскивает все доступные операционной системе принтеры, удовлетворяющие заданым требованиям (например способных печатать документы формата A3).
Если в качестве аргументов указать значения null
, то вернется массив из всех принтеров доступных ОС пользователя
PrintService printService =
PrintServiceLookup.lookupDefaultPrintService();
javax.print.DocPrintJob
по применению схожий с объектом типа java.awt.print.PrinterJob
, применявшемся в Java 1.2 API.
Ссылку на этот объект получают с помощью метода public DocPrintJob createPrintJob()
объекта реализующего интерфейс PrintService
. DocPrintJob job = printService.createPrintJob();
javax.print.DocFlavor
и его вложеных классов.
Принципиально класс DocFlavor
содержит информацию о MIME-типе печатаемых данных, кодировке, если это данные текстовые, и типе источника данных в виде полностью определенного имени Java-класса (например: java.io.FileInputStream
).DocFlavor
:
byte[]
java.io.InputStream
java.net.URL
char[]
java.io.Reader
java.lang.String
Класс BYTE_ARRAY | |
константа | комментарий |
---|---|
AUTOSENSE | соответствует MIME-типу "application/octet-stream", печатает данные "как есть", без разбора формата, что хорошо подходит для текстовых документов формата *.txt |
GIF | соответствует MIME-типу "image/gif" |
JPEG | соответствует "image/jpeg" |
PNG | соответствует "image/png" |
соответствует "application/pdf" | |
POSTSCRIPT | соответствует "application/postscript" |
TEXT_HTML_US_ASCII | соответствует "text/html;charset=us-ascii" |
TEXT_PLAIN_US_ASCII | соответствует "text/plain;charset=us-ascii" |
Класс INPUT_STREAM | |
константы этого класса, такие же, как и в классе BYTE_ARRAY | |
Класс URL | |
константы этого класса, такие же, как и в классе BYTE_ARRAY | |
Класс CHAR_ARRAY | |
TEXT_HTML | соответствует "text/html;charset=utf-16" |
TEXT_PLAIN | соответствует "text/plain;charset=utf-16" |
Класс READER | |
константы этого класса, такие же, как и в классе CHAR_ARRAY | |
Класс STRING | |
константы этого класса, такие же, как и в классе CHAR_ARRAY |
java.awt.print.Printable
java.awt.print.Pageable
(например класс Book)
java.awt.image.renderable.RenderableImage
DocFlavor docFlavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Прежде чем указывать формат и источник данных, желательно убедиться, что такие форматы и источники поддерживаются установленными у вас Java-библиотеками, так как не все медиа-типы из описаных выше имеют реальную поддержку.
Для этого можно воспользоваться например таким кодом, проверющим возможность работы с изрображениями формата JPEG, считываемыми из потока ввода:
PrintService printService =
PrintServiceLookup.lookupDefaultPrintService();
DocFlavor[] docFlavors =
printService.getSupportedDocFlavors();
DocFlavor testFlavor =
new DocFlavor("image/jpeg", "java.io.InputStream");
for (int i = 0; i < docFlavors.length; i++) {
if (docFlavors[i].equals(testFlavor)) {
...
break;
}
}
А чтобы увидеть список всех поддерживаемых в вашей системе форматов, можно использовать следующий код:
DocFlavor[] docFlavors =
printService.getSupportedDocFlavors();
for (int i = 0; i < docFlavors.length; i++) {
System.out.println(docFlavors[i].toString());
}
javax.print.attribute
и описывают коллекции свойств принтера и листа.
Сами свойства описываются классами из пакета javax.print.attribute.standard
.
В частности:
DocAttributeSet docAttributes =
new HashDocAttributeSet();
docAttributes.add(OrientationRequested.PORTRAIT);
PrintRequestAttributeSet printAttributes =
new HashPrintRequestAttributeSet();
printAttributes.add(new Copies(2));
javax.print.SimpleDoc
, реализующего интерфейс javax.print.Doc
.
PrinterJob
.
Ниже приводится пример создания объекта для печати, причем подразумевается, что данные извлекаются из потока, связанного с файлом:
Doc doc = new SimpleDoc(new FileInputStream("test.txt"),
docFlavor,
docAttributes);
Источники данных могут быть различными, в зависимости от поддерживаемых системой медиа-типов.
В нашем случае (см. выше) был использован поток чтения данных типа java.io.InputStream без обработки внутреннего форматирования, что
указано в объекте типа DocFlavor помощью MIME-типа "application/octet-stream".
По прежнему можно в качестве источника данных использовать объект типа Printable
или Pageable
, представляющий собой изображение для печати, формируемое программно, путем переопределения метода print()
.
public void print(Doc doc,PrintRequestAttributeSet attributes)throws PrintException
принадлежащего объекту реализующему интерфейс javax.print.DocPrintJob
.
Пример, кода реализующего такое действие, приведен ниже:
try {
job.print(doc,printAttributes);
} catch (PrintException e) {
...
}