Java2の印刷機能

Java2では、印刷用のprint()メソッドを持つPrintableインターフェースを実装したオブジェクトを用意し、そのオブジェクトをPrinterJobオブジェクトに渡すだけでプリンタから印刷を行うことができます。今回は、正方形を描く単純なpaint()を定義し、印刷機能を試してみましょう。

印刷の流れ

Javaプログラムから印刷するためには、印刷用にPrintablepaint()メソッドを実装したオブジェクトが必要です。このpaint()メソッドには、描画用のGraphicsとページの情報を格納したPageFormat、また何ページ目かをあらわすインデックスが渡されます。1ページの印刷であれば、通常の描画同様Graphicsに描画を行うだけですが、複数のページにまたがる印刷では印刷領域を意識しながら描画を行う必要がありそうですね。座標系は1/72インチを1単位とするものになっているようです。
 paint()では、印刷範囲外のページであればNO_SUCH_PAGEを、範囲内のページで印刷処理を行ったのであればPAGE_EXISTSを返します。1ページの印刷であれば、インデックスが0のときだけ印刷処理を行い、あとはNO_SUCH_PAGEを返すわけですね。

 今回は、以下のようなページの情報を取得して表示してから、印刷領域から1インチ内側に1辺2インチの正方形を印刷するpaint()メソッドを持つtestPrintクラスを定義してみました。

  class testPrint implements Printable {

      public int print(Graphics g,PageFormat fmt,int index) {

          System.out.println("index:"+index);	

          // ページインデックスが印刷範囲外なら戻る
          if (index!=0)
              return NO_SUCH_PAGE;

          // ページサイズを取得
          int w=(int)fmt.getWidth();
          int h=(int)fmt.getHeight();

          // 印刷可能領域を取得
          int x=(int)fmt.getImageableX();
          int y=(int)fmt.getImageableY();
          int iw=(int)fmt.getImageableWidth();
          int ih=(int)fmt.getImageableHeight();

          System.out.println("Width:"+w);	
          System.out.println("Height:"+h);	
          System.out.println("ImageableX:"+x);	
          System.out.println("ImageableY:"+y);	
          System.out.println("ImageableWidth:"+iw);	
          System.out.println("ImageableHeight:"+ih);	

          // 黒い正方形を描画
          g.setColor(Color.black);
          g.drawRect(72+x,72+y,144,144);

          return PAGE_EXISTS;

      }

  }

 印刷用のクラスができたら、あとはそれをPrinterJobオブジェクトのsetPrintableに渡し、print()メソッドを呼び出せば印刷されます。今回は、PrinterJobオブジェクトを作成して印刷を行う以下のようなアプリケーションを作ってみました。

  public class jprintt {

      public static void main(String args[]) {

          PrinterJob pj=PrinterJob.getPrinterJob();

          pj.setPrintable(new testPrint());

          try {
              pj.print();
          } catch (Exception e) {}

      }

  }

プログラム

プリンタを接続した状態でコンパイルして実行すると、正方形が印刷されます。

プログラムソース表示

自作Javaアプリケーションに印刷機能を実装できれば、ディスプレイの「外」に処理結果を持ち出せるようになりますね。


Javaプログラミング実験室 > プログラミング資料庫