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