アプリケーションは、PrinterJob を使用して、2D グラフィックスをプリンタまたは出力ストリームに印刷できます。lookupPrintServices メソッドは、PrintService オブジェクトの配列を返します。各オブジェクトは、2D グラフィックスを印刷できるプリンタを表現します。lookupStreamPrintServices メソッドは、StreamPrintServiceFactory オブジェクトの配列を返します。各オブジェクトは、StreamPrintService を返すことができます。アプリケーションから StreamPrintService を使用すると、印刷データが出力ストリームに送信されます。StreamPrintService では、ドキュメントを印刷する以外に、2D グラフィックスをほかの書式にも変換できます。このセクションでは、PrinterJob を使用して、2D グラフィックスをプリンタまたは出力ストリームに送信する方法について説明します。
// 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」に保存されます。
Java 2D と Java 印刷サービスを一緒に使用した場合の 1 つの問題として、印刷部数などの一部の属性が両方の API で定義されることがあります。このような属性を PrintRequestAttributeSet に定義した場合は、PrinterJob に指定した同じ属性が優先されます。ユーザーが印刷ダイアログ内で印刷部数を更新した場合は、PrinterJob が自動的に更新および反映されます。このとき、既存の動作の再確認をユーザーに要求します。
PageFormat の仕様もまた、Java 印刷サービスの Media、MediaPrintableArea、および OrientationRequested 属性と重複しています。アプリケーションから Printable インタフェースと print(PrintRequestAttributeSet) メソッドを使用すると、属性セットに含まれる媒体、印刷方向、およびイメージング可能領域の属性が、新しい PageFormat に追加されます。PageFormat は、Printable オブジェクトの印刷メソッドに渡されます。アプリケーションで Pageable インタフェースを使用した場合は、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); }