3.1 バッチ印刷アプリケーションの開発の概要
バッチ印刷アプリケーションの開発の概要
バッチ印刷を利用した印刷アプリケーションは、PDFを生成した後にクライアントへ表示するWEBアプリケーションに良く似ています。これは、既存のbiz-Streamライブラリを利用して、PDFを生成するWEBアプリケーションを簡単にバッチ印刷・アプリケーションに移行できることを意味します。ユーザアプリケーションに提供するインターフェイスは、大きく2つに分かれます。
印刷指示
基本的には、ユーザアプリケーションが出力先に指定しているストリームのインスタンス代わりに、バッチ印刷が提供するPDFBatchPrintStreamクラスのインスタンスを指定することでバッチ印刷のアプリケーションとなります。PDFBatchPrintStreamの提供するメソッドを呼び出すことで、次のように印刷を制御できます。
- 出力先のプリンタ名を指定
- 出力する際に使用するトレイを指定
- 印刷部数を指定
- 印刷するファイルの開始ページ番号を指定
- 印刷するファイルの終了ページ番号を指定
- ページサイズに合わせて印刷フラグを指定
また、印刷指示に対して、任意の文字列でジョブ名を指定できます。
印刷指示を受け付けると、印刷サーバは、「ジョブID」を返します。この「ジョブID」を使用して、以下の「 印刷状態取得」で印刷状態を取得することができます。
印刷状態取得
印刷状態取得では、印刷指示で取得した「ジョブID」から、次のような印刷状態を取得できます。
- ジョブ名 (印刷指示で指定したジョブ名)
- 出力プリンタ名
- 印刷指示受付日時
- 印刷状態コード
- 印刷状態内容
- エラーコード
- エラー原因
- エラー内容
クライアント/サーバ間の処理の流れ
バッチ印刷を利用したアプリケーションは、以下のような処理が行われます。印刷指示
- アプリケーション開発者が実装するユーザアプリケーションで、印刷データの出力用ストリームとしてPDFBatchPrintStreamクラスをインスタンス化し、印刷指示の設定を行います。続いてbiz-StreamライブラリのPDF生成エンジンをインスタンス化し、出力先として先に生成したPDFBatchPrintStreamクラスのインスタンスを指定します。
- PDF生成エンジンに対してPDFの生成を指示します。生成されたPDFはPDFBatchPrintStreamクラスのインスタンスを経由し、印刷データとして印刷サーバに送信されます。
- 印刷サーバは、印刷指示を受け付けた後、「ジョブID」を返します。
- 印刷サーバは、印刷データからプリンタの制御情報を取り出し、プリンタの選択およびその他の制御を行います。その後、印刷データの印刷を行い、動作状況がログに記録されます。
印刷状態取得
印刷状態取得では、印刷指示で取得した「ジョブID」から、次のような印刷状態を取得できます。
- アプリケーション開発者が実装するユーザアプリケーションで、印刷状態を取得するためPDFBatchStatusクラスをインスタンス化し、queryメソッドを用いて、指定したジョブIDの印刷状態を取得します。PDFBatchStatusのインスタンスからジョブの印刷状態を取得するため、getPrintStatusメソッドを実行して、PDFBatchPrintStatusクラスのインスタンスを取得します。
- 要求に応じて、印刷状態のデータを返します。
- 印刷状態の管理は、メモリ上で行われているため、印刷サーバを再起動するとそれまでの印刷状態は消えます。
コーディング方法
前述のように、バッチ印刷アプリケーションは、PDFを生成する部分は既存のPDF生成アプリケーションとまったく同じように作成できます。ここではバッチ印刷のコーディングに関して説明するため、biz-Streamライブラリを利用したPDFを生成するユーザアプリケーションがすでにあるものとします。biz-Streamライブラリを利用したPDFを生成するユーザアプリケーションの開発方法およびレイアウトの作成方法に関しては、biz-Streamの各マニュアルをご参照ください。最も簡単なPDFを生成するユーザアプリケーションは以下のように記述できます。(ここではサーブレットの基本的な処理は省略してあります)
public void makePdf(HttpServletResponse response) { ServletOutputStream output = response.getOutputStream(); PDFEngine pdf = new PDFEngine(output); XMLSuper xml = new JaxpXML("${base-dir}/sample/xml/Circle/CircleSample1.xml", pdf); xml.parse(); xml.setPageSize(); xml.calcDataSize(); xml.toPDF(); xml.close(); }
public void makePdf(HttpServletResponse response) { PDFBatchPrintStream batch = new PDFBatchPrintStream("http://server/"); //ポート番号が3000以外の場合は http://server:nnnn/ PDFEngine pdf = new PDFEngine(batch); XMLSuper xml = new JaxpXML("${base-dir}/sample/xml/Circle/CircleSample1.xml", pdf); xml.parse(); xml.setPageSize(); xml.calcDataSize(); xml.toPDF(); xml.close(); }
PDFBatchPrintStream batch = new PDFBatchPrintStream("http://server/"); //ポート番号が3000以外の場合は http://server:nnnn/ batch.setPrinterName("Canon LBP3800 LIPSLX"); // プリンタ名 batch.setNumberOfCopy(1); // 印刷部数
- PDFBatchPrintStreamのインターフェイスに関しては『3.2 アプリケーション・インターフェイス』に詳細に記述しています。また、『第4章 サンプルプログラム』で具体的な利用例を示しますので、こちらもご参照ください。