EeBlog(テクニカルブログ)

第86回 Java Print Service API その4

引き続き「Java Print Service API」について学んでいきます。

今回は印刷属性を学びます。

印刷属性とは、用紙サイズ、印刷する部数などの印刷時に行う設定のことです。
Java Print Service APIでは、印刷データと印刷属性が別々なため、次のメリットがあります。

・異なる印刷属性を使用して、異なる時間に同じ印刷データを印刷できる
・同じ印刷属性を使用して、異なる時間に異なるデータを印刷できる。

印刷属性の種類はjavax.print.attributeパッケージで以下のように定義されており、
一般的な印刷アプリケーションではPrintRequestAttributeを使用します。

・DocAttribute 個々のドキュメントの特性と個々のドキュメントに適用される印刷ジョブの設定
・PrintRequestAttribute 印刷ジョブ全体と印刷ジョブの全てのドキュメントに適用される設定
・PrintJobAttribute 印刷ジョブの状態を報告
・PrintServiceAttribute 印刷サービスの状態を報告
・SupportedValuesAttribute 別の属性でサポートされる値を取得

標準的な印刷属性はjavax.print.attribute.standardパッケージに用意されています。
印刷部数を指定するCopiesクラス、用紙サイズを指定するMediaSizeNameクラスなどが代表的です。

では、実際に印刷属性を指定して印刷処理を行ってみましょう。
今回のサンプルでは、A4サイズで当社サイトのバドミントンクラブの画像を2部印刷します。(Java5以降)

 import java.net.URL;
 import javax.print.Doc;
 import javax.print.DocFlavor;
 import javax.print.PrintService;
 import javax.print.PrintServiceLookup;
 import javax.print.SimpleDoc;
 import javax.print.attribute.HashPrintRequestAttributeSet;
 import javax.print.attribute.PrintRequestAttributeSet;
 import javax.print.attribute.standard.Copies;
 import javax.print.attribute.standard.MediaSizeName;


 public class PrintTest {
     public static void main(String args[]) throws Exception {
         // ドキュメント生成
        URL url = new URL("http://www.eeb.co.jp/images/IMG_2082_1.jpg");
         DocFlavor docFlavor = DocFlavor.URL.JPEG;
         Doc doc = new SimpleDoc(url, docFlavor, null);


         // 印刷要求属性設定
        PrintRequestAttributeSet printRequestAttributeSet 
                                    = new HashPrintRequestAttributeSet();
         printRequestAttributeSet.add(new Copies(2));// 部数
        printRequestAttributeSet.add(MediaSizeName.ISO_A4);// 用紙サイズ


        // docフレーバと印刷要求属性に対応している印刷サービス一覧取得
        PrintService[] printServices = PrintServiceLookup.lookupPrintServices
                                        (docFlavor, printRequestAttributeSet);


         // 印刷実行
        for (PrintService printService : printServices) {
             printService.createPrintJob().print(doc, printRequestAttributeSet);
             break;
         }
     }
 }