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); }