java.awt.print
のAPIは、次のPrinterJobメソッドで構成されます:
PrintService
またはStreamPrintServiceFactory
オブジェクトの配列として返されます。PrinterJob
でPrintService
を設定および取得するメソッド。PrintRequestAttributeSet
パラメータを取得するpageDialog
メソッド。PrintRequestAttributeSet
パラメータを取得するprintDialog
メソッド。PrintRequestAttributeSet
パラメータを取得するprint
メソッド。printDialog
およびpageDialog
メソッドは属性セットを取得するため、ユーザーはダイアログからinitial
属性設定を編集できます。
アプリケーションでは、PrinterJob
を使用して、2Dグラフィックをプリンタまたは出力ストリームに印刷できます。 lookupPrintServices
メソッドは、PrintService
オブジェクトの配列を返します。各オブジェクトは、2Dグラフィックを印刷できるプリンタを表します。 lookupStreamPrintServices
メソッドは、StreamPrintServiceFactory
オブジェクトの配列を返します。各オブジェクトの配列は、StreamPrintService
を返します。 アプリケーションは、StreamPrintService
を使用して出力ストリームに印刷データを送信します。 印刷ドキュメントと同様に、アプリケーションはStreamPrintService
を使用して、2Dグラフィックを他のフォーマットにトランスコードできます。 この項では、PrinterJob
を使用して、2Dグラフィックをプリンタおよび出力ストリームに送信する方法について説明します。
pageDialog
、printDialog
およびprint
メソッドを使用すると、アプリケーションで印刷設定を初期化し、これらの設定をダイアログに渡すことができるため、ユーザーは、次のコード・サンプルで示すように、印刷リクエストを送信する前に設定を更新できます:
// 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 Print ServiceのMedia
、MediaPrintableArea
およびOrientationRequested
属性とも重複します。 アプリケーションがPrintable
インタフェースおよびprint(PrintRequestAttributeSet)
メソッドを使用する場合、属性セットに含まれるメディア、方向およびイメージ可能領域属性が新しいPageFormat
に追加され、Printable
オブジェクトのprint
メソッドに渡されます。 アプリケーションでPageable
インタフェースが使用されている場合、PageFormat
は変更されません。
PrinterJob
およびStreamPrintService
を使用して、出力データを出力ストリームに送信することもできます。 この例は、前の項の例に似ていますが、PrintService
のかわりにStreamPrintService
が使用されています:
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); }