アプリケーションは、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); }