|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Приложения могут использовать PrinterJob, чтобы напечатать 2-D графику к принтеру или к потоку вывода. lookupPrintServices метод возвращает массив объектов PrintService, каждый из которых представляет принтер, который может напечатать 2-D графику. lookupStreamPrintServices метод возвращает массив объектов StreamPrintServiceFactory, каждый из которых может возвратить StreamPrintService. Приложение использует StreamPrintService, чтобы отправить данные печати потоку вывода. Как с печатью документов, приложения могут использовать StreamPrintService, чтобы транскодировать 2-D графику к другим форматам. Этот раздел обсуждает использование PrinterJob, чтобы представить 2-D графику принтеру и потоку вывода.
// Step 1: Set up initial print settings.
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
// Step 2: Obtain a print job.
PrinterJob pj = PrinterJob.getPrinterJob();
// Step 3: Find print services.
PrintService []services = PrinterJob.lookupPrintServices();
if (services.length > 0) {
System.out.println("selected printer: " + services[0]);
try {
pj.setPrintService(service[0]);
// Step 2: Pass the settings to a page dialog and print dialog.
pj.pageDialog(aset);
if (pj.printDialog(aset)) {
// Step 4: Update the settings made by the user in the dialogs.
// Step 5: Pass the final settings into the print request.
pj.print(aset);
}
} catch (PrinterException(pe)) {
System.err.println(pe):
}
}
См. Пример: Print2DPrinterJob.java для полного приложения. Отметьте, что Шаг 4 в этом примере кода, кажется, не соответствует никакой определенной строке кода. Фактически, пользователь обновляет настройки печати в диалоговых окнах, и обновленные настройки сохраняются в PrintRequestAttributeSet, aset.
Одна проблема с использованием 2-D Java и Служба печати Java вместе состоит в том, что некоторые атрибуты, такие как число копий, определяются в обоих API. Если такой атрибут определяется в PrintRequestAttributeSet, он имеет приоритет по тому же самому атрибуту, определенному в PrinterJob. Отметьте, что, если пользователь обновляет число копий в диалоговом окне печати, PrinterJob автоматически обновляется, чтобы отразить это, который подтверждает существующее поведение.
Спецификация PageFormat также накладывается с Носителями Службы печати Java, MediaPrintableArea, и атрибутами OrientationRequested. Если приложение использует Печатаемый интерфейс и печать (PrintRequestAttributeSet) метод, носители, ориентация, и вызывающие мысленный образ атрибуты области, содержавшиеся в наборе атрибута, добавляются к новому PageFormat, который передают к методу печати Печатаемого объекта. Если приложение использует Листаемый интерфейс, PageFormat не изменяется.
PrinterJob job = PrinterJob.getPrinterJob();
String psMimeType = "application/postscript";
FileOutputStream outstream;
StreamPrintService psPrinter;
StreamPrintServiceFactory []spsFactories =
PrinterJob.lookupStreamPrintServices(psMimeType);
if (factories.length > 0) {
try {
outstream = new File("out.ps");
psPrinter = factories[0].getPrintService(fos);
// psPrinter can now be set as the service on a PrinterJob
} catch (FileNotFoundException e) { }
}
job.setPrintService(service[0]); // if app wants to specify this printer.
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(2));
job.print(aset);
}