biz-Streamマニュアルバッチ印刷ガイド第3章 バッチ印刷アプリケーションの開発の概要3.1 バッチ印刷アプリケーションの開発の概要

3.1 バッチ印刷アプリケーションの開発の概要

バッチ印刷アプリケーションの開発の概要

バッチ印刷を利用した印刷アプリケーションは、PDFを生成した後にクライアントへ表示するWEBアプリケーションに良く似ています。これは、既存のbiz-Streamライブラリを利用して、PDFを生成するWEBアプリケーションを簡単にバッチ印刷・アプリケーションに移行できることを意味します。
ユーザアプリケーションに提供するインターフェイスは、大きく2つに分かれます。

  1. 印刷指示

    基本的には、ユーザアプリケーションが出力先に指定しているストリームのインスタンス代わりに、バッチ印刷が提供するPDFBatchPrintStreamクラスのインスタンスを指定することでバッチ印刷のアプリケーションとなります。PDFBatchPrintStreamの提供するメソッドを呼び出すことで、次のように印刷を制御できます。

    1. 出力先のプリンタ名を指定
    2. 出力する際に使用するトレイを指定
    3. 印刷部数を指定
    4. 印刷するファイルの開始ページ番号を指定
    5. 印刷するファイルの終了ページ番号を指定
    6. ページサイズに合わせて印刷フラグを指定

    7. また、印刷指示に対して、任意の文字列でジョブ名を指定できます。
      印刷指示を受け付けると、印刷サーバは、「ジョブID」を返します。この「ジョブID」を使用して、以下の「 印刷状態取得」で印刷状態を取得することができます。

  2. 印刷状態取得

    印刷状態取得では、印刷指示で取得した「ジョブID」から、次のような印刷状態を取得できます。

    1. ジョブ名 (印刷指示で指定したジョブ名)
    2. 出力プリンタ名
    3. 印刷指示受付日時
    4. 印刷状態コード
    5. 印刷状態内容
    6. エラーコード
    7. エラー原因
    8. エラー内容


クライアント/サーバ間の処理の流れ

バッチ印刷を利用したアプリケーションは、以下のような処理が行われます。

  1. 印刷指示

    1. アプリケーション開発者が実装するユーザアプリケーションで、印刷データの出力用ストリームとしてPDFBatchPrintStreamクラスをインスタンス化し、印刷指示の設定を行います。続いてbiz-StreamライブラリのPDF生成エンジンをインスタンス化し、出力先として先に生成したPDFBatchPrintStreamクラスのインスタンスを指定します。
    2. PDF生成エンジンに対してPDFの生成を指示します。生成されたPDFはPDFBatchPrintStreamクラスのインスタンスを経由し、印刷データとして印刷サーバに送信されます。
    3. 印刷サーバは、印刷指示を受け付けた後、「ジョブID」を返します。
    4. 印刷サーバは、印刷データからプリンタの制御情報を取り出し、プリンタの選択およびその他の制御を行います。その後、印刷データの印刷を行い、動作状況がログに記録されます。


  2. 印刷状態取得

    印刷状態取得では、印刷指示で取得した「ジョブID」から、次のような印刷状態を取得できます。

    1. アプリケーション開発者が実装するユーザアプリケーションで、印刷状態を取得するためPDFBatchStatusクラスをインスタンス化し、queryメソッドを用いて、指定したジョブIDの印刷状態を取得します。PDFBatchStatusのインスタンスからジョブの印刷状態を取得するため、getPrintStatusメソッドを実行して、PDFBatchPrintStatusクラスのインスタンスを取得します。
    2. 要求に応じて、印刷状態のデータを返します。
    • 印刷状態の管理は、メモリ上で行われているため、印刷サーバを再起動するとそれまでの印刷状態は消えます。



コーディング方法

前述のように、バッチ印刷アプリケーションは、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();
}
これをバッチ印刷に移行する場合、次の赤行のような変更を加えることになります。(PDF生成エンジンの出力先に指定していた出力ストリームをPDFBatchPrintStreamのインスタンスに変更する)
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のメソッドを呼び出すことで行います。
	PDFBatchPrintStream batch = new PDFBatchPrintStream("http://server/");    //ポート番号が3000以外の場合は http://server:nnnn/
	batch.setPrinterName("Canon LBP3800 LIPSLX");	// プリンタ名
	batch.setNumberOfCopy(1);						// 印刷部数