Java2では、印刷用のprint()メソッドを持つPrintableインターフェースを実装したオブジェクトを用意し、そのオブジェクトをPrinterJobオブジェクトに渡すだけでプリンタから印刷を行うことができます。今回は、正方形を描く単純なpaint()を定義し、印刷機能を試してみましょう。 印刷の流れJavaプログラムから印刷するためには、印刷用にPrintableのpaint()メソッドを実装したオブジェクトが必要です。このpaint()メソッドには、描画用のGraphicsとページの情報を格納したPageFormat、また何ページ目かをあらわすインデックスが渡されます。1ページの印刷であれば、通常の描画同様Graphicsに描画を行うだけですが、複数のページにまたがる印刷では印刷領域を意識しながら描画を行う必要がありそうですね。座標系は1/72インチを1単位とするものになっているようです。 今回は、以下のようなページの情報を取得して表示してから、印刷領域から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アプリケーションに印刷機能を実装できれば、ディスプレイの「外」に処理結果を持ち出せるようになりますね。 |