Javaによる印刷

  1. 印刷の準備
    1. PrinterJobの取得
       印刷するには、まず、printerJobのオブジェクトを取得します。これには、スタティックメソッド getPrintdrJob() を利用します。
       printerJob printJob = PrinterJob.getPrinterJob();
      この処理には import javax.print.*; が必要で、JDK1.4 以後でサービスされます。

    2. 用紙設定
      printJob ではまず、
       job.pageDialog(attributes);
      で、ページ設定ダイアログを表示し、用紙サイズや向き、マージン(余白)を attributes に取得します。



    3. Printableの設定
       印刷を行うには、Printable を実装した 印刷用クラスが必要です。このクラスのメソッドでプレビューを行う paintComponent()や、印刷を行う print() メソッドを定義します。いずれも、用紙で設定された範囲で、グラフィックスメソッドを用いて、文字や図形を描画します。
       printJob.setPrintable(printClass);
      ここで、printClassは、Printableを実装したクラスのオブジェクト名です。

    4. 印刷ダイアログ
       次に、
       printJob.printDialog(attributes)
      で印刷ダイアログを表示し、 プリンタや印刷範囲を設定します。

       

      「印刷」ボタンを押すと、setPrintable() で設定したクラスの print() メソッドを呼び出し、印刷を開始します。

    5. 用紙サイズ
       用紙サイズの単位は ポイント になります。ポイントは(1/72)インチで、1インチは25.4mmです。文字のサイズは通常このポイント単位で指定しています。A4サイズの用紙は210*297mmで、これは、ほぼ、600*840 ポイント
      に相当します。ただし、印刷にはマージン(余白)が必要です。ページ設定のデフォルトでは1インチのマージンを指定していますから、この場合、印刷可能領域は約 450*700 ポイントになります。この値は、print() メソッドに渡される PageFormat クラスのオブジェクト pf から次のように取得できます。
       pf.getImageableWidth() 、pf.getImageableHeight()

    6. Printableクラス
       印刷は、Printableクラスをimplementsします。下の例は JPanelを継承し、printPanel クラスを定義しています。
       public class PrintPanel extends JPanel implements Printable
      JPanelを継承することで、印刷画面のプレビューを行うことができます。
      ここで、次のメソッド
       public int print(Graphics g, PageFormat pf, int page)
      を定義します。gは引き渡される Graphicクラスで、これに描画を行うと用紙に印刷されます。pf は用紙設定から渡される PageFormat で印刷する原点やサイズを取得できます。pageは、printするページ番号が引き渡されます。
       指定されたページの印刷が不要な場合、Printable.NO_SUCH_PAGE を返します。必要な場合、グラフィックスメソッドを利用して描画処理を行い Printable.PAGE_EXISTS を返します。これで、印刷が実行されます。
       このクラスのオブジェクトを、
       printJob.setPrintable(printClass);
      で設定しておくと、印刷ダイアログから印刷が実行されます。

  2. プロジェクト
    1. プロジェク
       アプリのプロジェクトを作成します。部品はJbuilderで配置していません。

    2. Application1クラス
       main()で、new Application1(); を行い、クラス Application1() のコンストラクタで
       JFrame frame=new PrintTestFrame();
      を生成します。

    3. PrintTestFrameクラス
      JFrameを継承したクラスです。
       class PrintTestFrame extends JFrame
       print ボタン、pageSetupボタン、を buttonPanel に配置します。また、プレビュー画面を表示する、PrintPanel クラスを生成し、これを中央に配置します。
       Page setup ボタンで、printjob1.pageDialog(attributes);で、ページ設定ダイアログを表示します。また、printボタンで、printjob1.printDialog(attributes) でプリントダイアログを表示し、printjob1.print(attributes);で印刷を開始します。
       
       

    4. PrintPanelクラス
      Jpanelを継承し、Printableを実装します。
       public class PrintPanel extends JPanel implements Printable
      1. paintComponent
        プレビューを行います。実際の処理は、drawPage(g2); でおこないますが、これは、印刷用の print() と共用します。

      2. print()
         実際の印刷処理を行います。
         public int print(Graphics g, PageFormat pf, int page) throws PrinterException
        pageが1以上の場合、Printable.NO_SUCH_PAGE を返します。そうでないとき、translate()で、原点位置を余白を覗いた左上に移動し、drawPage(g2) を実行し、Printable.PAGE_EXISTS を返します。
         
        public int print(Graphics g, PageFormat pf, int page)
           throws PrinterException
        {
           if (page >= 1) return Printable.NO_SUCH_PAGE;
           Graphics2D g2 = (Graphics2D)g;
           g2.translate(pf.getImageableX(), pf.getImageableY());
           //印刷範囲を表示
           /*g2.draw(new Rectangle2D.Double(0, 0,
              pf.getImageableWidth(), pf.getImageableHeight()));*/
           System.out.println("A4 Size:"+pf.getImageableWidth()+" "+pf.getImageableHeight());
           drawPage(g2);// to print
           return Printable.PAGE_EXISTS;
        }

      3. drawPage(Graphics2D g2)
         座標系がポイント単位になる他は、通常のグラフィック処理と同じです。ここでは、まず、フォントを設定して文字を表示します。
          String fontname="MS 明朝";
          int type =Font.PLAIN;
          int size=15;
          type=type|Font.BOLD;
          Font font;
          font=new Font(fontname,type,size);
          g2.setFont(font);
          g2.drawString("極座標による花の描画",30,50);
          size=12;type = Font.PLAIN;
          font=new Font(fontname,type,size);
          g2.setFont(font);
          g2.drawString("ca=70,cb=17,cc=6,",30,65);

        次に、花のグラフィックを表示します。


  3. 実行
     Pagesetupでページを設定し、Printボタンでプリンタを指定し、「印刷」ボタンで印刷を開始します。

  4. ダウンロード
    このプロジェクトをダウンロードできます。次の行をクリックして、printTest.exeファイルを適当なフォルダに保存します。
     ダウンロード開始
    このファイルは自己解凍型の圧縮ファイルです。このファイルを実行すると指定したフォルダに必要なファイルが生成されます。