Net Express 技術情報(FAQ)


16-bit から 32-bit へ移行する際、日本語印刷に関連する注意事項はありますか

WRITE文で日本語を印刷する際の注意事項と制限事項を紹介します。


32bit Windows環境でのWRITE文による日本語の印刷時の注意について


*1) printer_redirection

WRITE文による日本語の印刷にはランタイム構成ファイル内で以下の設定が必須です。

 set printer_redirection=true


オンラインマニュアルの「システムリファレンス」、「付録 ランタイム構成」に記述されています。

印刷データは、この設定によりWindowsのプリントマネージャを通じてデフォルトのプリンタ(ネットワークプリンタも含む)に送られます。この設定がないとWindows上でデフォルトがネットワークプリンタに設定されていても、データはネットワークプリンタに送られません。

set printer_redirection=trueが不要なのは以下の場合です。

  • WRITE文による印刷で以下の場合
    日本語を含まない
    ローカルプリンタに出力する
    プリンタ制御コードを含まない

  • PC_WINプリンタ制御ルーチンによる印刷をする場合(「2.4 COBOLからWindowsスプーラを使用する」参照)


    ランタイム構成ファイル
    cobopt.cfgというテキストファイルをノートパッドなどのテキストエディタで作り、設定内容を書き込みます。このファイルは Net Express のインストール先の \NetExpress\Base\Bin ディレクトリの下に置いてください。

    ランタイム構成ファイルについての詳細は Net Express ヘルプをご参照ください。

*2) OS上での違いに関する注意(プリンタの設定)

プリンタプロパティの設定

  • Windows 95, 98
    特に必要な設定はありません。
    set printer_redirection=trueの設定がないと、日本語は出力されません。

  • Windows NT 4.0
    set printer_redirection=trueを設定しない場合、以下の設定によって、日本語の出力が可能です。
    デフォルトデータタイプ TEXT
    プリントプロセッサ WINPRNT

  • Windows NT3.X(プリントマネージャの設定)
    Windows NT 3.50上ではWRITE AFTER PAGEによる改ページができません。これはNT3.1及びNT3.50のWINPRNTにおいて改ページのエスケープシーケンスが正しくコード変換されないというOSのバグによるものです。このバグはNT3.51で改修されています。プリントマネージャの設定を一覧にすると以下のようになります。

    Windows NT3.X   | デフォルトデータタイプ | プリントプロセッサ | 日本語データ
    Windows NT 3.1  | TEXT                   | PCPRPRNT           | OK 
    Windows NT 3.50 | TEXT                   | WINPRNT            | 改ページコードが正しく動作しない (OSバグ)
    Windows NT 3.51 | TEXT                   | WINPRNT            | OK 


*3) プリンタを制御するエスケープシーケンスコード(16bit環境で使用していたプログラムを32bit環境に移行する場合の注意)

16bitのDOS環境で使用していたプリンタを制御するエスケープシーケンスコードはそのまま使用できません。

 例
      working-storage section.
      01 form-feed              pic x(10)
             value x"0c".
      ... 
          write print-record from form-feed.

WRITE AFTER PAGEではなく、直接、x"0c"を使って改ページさせたい場合はPC_WINプリンタ制御ルーチンを使用してください。このルーチンによってフォントの種類やサイズの変更も可能です。
PC_WINプリンタ制御ルーチンに関する詳細は「2.4 COBOLからWindowsスプーラを使用する」を参照してください。


WRITE文による印刷の16bit版COBOLとの互換性について

以上述べてきたように、Windows 32bit環境で日本語を印刷するためには、Windowsのプリントマネージャを通して出力することが必要になっています。これはOSの要請です。Micro Focus COBOLの省略時モードでは、16bit環境からの互換性を守るために、プリントマネージャではなく DOSサブシステムのプリンタ出力割り込みを使用していますので、日本語の印刷上記のような設定変更が必要になるのです。

COBOLのWRITE文でプリントマネージャを経由してプリンタに印刷すると、文字フォント、用紙サイズ、改行幅などの印刷属性は、印刷時のプリントマネージャの設定に左右されますので、MS-DOSのときのように一定の形式の印刷結果は期待できません。固定形式伝票を使用している場合、このことが問題になります。

プリントマネージャのもう一つの問題は、16bit環境で可能であったプリンタのエスケープシーケンスが作動しないことです。 Windows 32bit環境では、フォントサイズの設定などの印字属性の指定は、プリントマネージャが提供する一連の APIを使用して設定する必要があり、この意味で MS-DOSからの互換性がありません。従って、Micro Focus COBOLの16bit版で書かれたプログラムが、プログラム中でエスケープシーケンスを直接コーディングしていた場合、これは Windows 32bit環境では正しく印刷できません。

これらの互換性の問題は、OSのサポート範囲の相違に起因するものであり、Micro Focus製品の範囲内では救済することはできませんでした。