PreviousNext

Book4 付録
Version 7.0.1


Windowsプリントスプーラ操作ルーチン

 

Windows環境では、アプリケーションのプリント出力に関し2つの方法がある。1つは、(適切なポートのオープンによって)データを直接出力装置へ送り、もう1つはWindowsのプリントスプーラを使用する。大多数のアプリケーションは、プリント出力を待ち行列に加え、他のタスクの実行中にバックグラウンドとしてそれらを出力するスプーラを使用する。これに関しては、Windowsプリントスプーラは、他のオペレーティングシステムと共通のスプーラのように動作する(例えば、UNIXマシンの"lp"プログラム)。

 

しかし他の方法では、Windowsプリントスプーラと古典的なスプーラとの間には大きな違いがある。これらの相違は、WindowsとWindowsアプリケーションのグラフィカルな性格によるものであり、COBOLが果たすことができることにも影響を及ぼす。この項では、Windowsプリントスプーラがどのように動作し、それがプログラムにどのような影響を与えるかを示す。

 

普通、伝統的なスプーラを使用するプログラムは、次のように動作する。

 

1.

プログラムは、テキスト、データ及びプリンタ制御シーケンスを送り出す。

 

2.

スプーラは、データをディスク上に保存する。リソースが利用できるようになると、スプーラはシステムのプリンタを管理するポートドライバヘ情報を送る。

 

3.

ポートドライバは、ドキュメントを作成するプリンタへデータストリームを供給する。

 

このシナリオでは、プログラムがすべてのプリンタ制御コードを提供し、スプーラとポートドライバは単に転送を調整するだけである。

 

Windows下のプリントスプーリング方式はこれとは異なり、典型的な制御シーケンスは次のようになる。

 

1.

ドキュメントの各ページの論理イメージを記述するため、プログラムはWindowsのグラフィカルAPIを呼び出す。WindowsのグラフィカルAPIは、"GDI"(グラフィカル装置インタフェース)と称されている。

 

2.

GDIサブシステムは、プリンタドライバへ渡される各ページの低レベル記述を構成する。プリントドライバとGDIはともに、プリンタに対し適切な出力を行なうのに必要なデータストリームを構成する。このデータストリームは、一時的にディスクに格納される。

 

3.

リソースが利用可能になると、スプーラはプリンタのポートドライバへディスクのデータを送り出す。この時点から、伝統的なスプーラと同じプロセスになる。

 

スプーラ自身の操作は、両シナリオとも非常によく似ている。両者の違いは、WindowsではGDIとプリンタドライバがプリンタ制御シーケンスを作成するが、伝統的モデルではプログラムが制御シーケンスを作成することである。

 

プリントプロセスのこのアプローチは、Windowsアプリケーションがプリンタ装置の型式に関係なく、グラフィカル出力を作成できることである。これは、ワードプロセッサのような複雑なプリントタスクやプログラムの作図を非常に簡便化する。

 

しかし簡単なレポート出力のときには、伝統的アプローチよりも複雑になる。単にテキストデータと復帰制御コードを送る代わりに、アプリケーションは、装置状況の取得、適切なフォントの選択と計測、テキスト行の形式化と装置へそれらを描くことと、必要な行と位置情報の維持を行なうプロセスの連携を通じて達成しなければならない。

 

幸いなことに、ACUCOBOL-GTは、これらの作業を簡単に行なう。ランタイムシステムは、Windowsスプーラを使用して伝統的な様式のプリントをシミュレートするプリンタドライバを所有している。このドライバの利点を引き出すには、単にプリントファイルに"-Q プリンタ名"や"-P SPOOLER"をASSIGN句で割り当てるだけである。Getting Started マニュアルを参照のこと。Windowsスプーラを使用しているとき、レポートの中間でフォントを変更することができる。プリントファイルを開いている間に、W$FONTライブラリルーチンを介して単に新しいフォントを選択する。フォントの変更はいつでも可能である。W$FONTを呼出す前に、WFDEVICE_WIN_PRINTERをTRUEに設定する。行を進めるとき、ランタイムは行の高さを決めるために選択したフォントの高さを使用する。そして、フォントは選択したプリンタに関連付けられなければならない。

 

注意事項:Windowsが使用するプリントプロセス(GDI経由)は、アプリケーションが直接プリンタを制御することを妨げる。プリントデータに制御コード(プリンタのピッチ変更、圧縮プリントモードへの変換、レーザープリンタへの書式プリントのような種々の機能を遂行する)を埋め込んだプログラムは、GDIがそれら制御コードを理解しないので、Windowsの下では動かない。代わりに、コードを正規のテキストデータとして取り扱おうとする。

 

Windows が使用するプロセスは、アプリケーションが個々のプリンタをいかに駆動するか知る必要がないという利点を持つが、アプリケーションが直接プリンタを駆動することを選択できないという不利な点もある。

 

アプリケーションが直接プリンタを制御する必要がある場合には、次の3つの選択肢がある。

 

1.

下記に記述されているWIN$PRINTERルーチンを試用する。このルーチンを用いて、COBOLから直接いくつかの基本的な制御操作を遂行することができる。

 

2.

プリントファイルをプリンタ装置に割り当てて、プリンタへ直接レポートを送信する。この方法でプリンタを直接制御することができるが、Windowsプリントスプーラ使用時の利点は失われる。

 

3.

プリントイメージの記述に、GDIを使用する。これは通常、'C'ないしは直接GDIをサポートする他の言語で書かれた外部関数の呼び出しを含む。この選択が最も柔軟性に富むが、多大な作業が必要となる。

 


PreviousNext

Copyright (C) 1998-2005 Acucorp, Inc. All rights reserved.