はじめに
紙ベースで情報をやりとりする必然性が減ってきたとはいえ、印刷機能はまだまだ業務的なニーズのある領域だと思います。JavaではGraphicsオブジェクトを使用することで、画面への描画と同じように印刷機能を実装することができます。これらは最新技術ではありませんがその面白さを知ってもらえればと思います。
Java Graphics
印刷機能を説明する前にJavaのグラフィックス描画について簡単に説明します。Java Graphicsはユーザが出力先デバイスに対して描画を行うための「ペン」のような機能を提供します。以下のサンプルコードを見てください。
/**
* 複数の楕円を描画するクラス
*/ public class RoundDraw { private int width; private int height; //・・・中略・・・ public void draw(Graphics g){ g.setColor(Color.WHITE); //ペン先の色を白に g.fillRect(0, 0, width, height); //四角領域を塗りつぶす g.setColor(Color.BLUE); //ペン先の色を青に for (int x = 0; x < width; x +=10){ g.drawOval(x, 0, width - 2 * x, height); //楕円を描画 } for (int y = 0; y < height; y += 10){ g.drawOval(0, y, width, height - 2 * y); //楕円を描画 } } }
サンプルのRoundDrawクラスは幅と高さを指定することで、その領域にたくさんの楕円を描画するためのクラスです。draw
メソッドで描画処理を実装しています。setColor
でペン先の色を決定し、fillRect
で矩形領域を塗りつぶします。drawOval
は楕円形を描画するメソッドです。
このRoundDrawクラスを内包したSwingコンポーネントを作成し、JFrameで動作確認します。JFrameウィンドウ上にたくさんの楕円形が描かれたグラフィックスが描画されました。
印刷機能の実装方法
さて、Graphicsという「ペン」を使うことにより、画面に対して自由な描画ができることを確認しました。紙に印刷する場合でも基本的に要領は同じです。
Javaでの印刷機能の実装には2種類の方法があります。1つはAWT Printで、もう1つはJPS(Java Print Service)です。JPSはJava 1.4から追加された新しいAPIです。JPSの方が細かい指定ができるのですが、AWT Printの方が適しているケースもあります。では、それぞれについて紹介していきます。