始めの言葉

「プリンターから印刷できて当たり前」と、ユーザーからもSIerからも軽視されがちなプリンターの世界ですが、実際にはお困りだったり、思ったような印刷結果が得られないまま我慢してお使いの皆様のために、今までの経験が役立てばと、このブログを立ち上げました。印刷の基本から、応用情報、問題の解決方法を情報発信すると共に、PDF化など、これからどうするかについても、ご相談に乗れれば幸いです。ご質問はコメントでお寄せください。

2015年9月22日火曜日

HPT機能を使った印刷 - コマンド変換機能の制約 -

PCOMM の PDT印刷では、PDT ファイルの定義に従って PCOMM のプリンター・セッションが、AS/400 から受信した印刷データの中の制御コードを、5577 形式や PAGES 形式に変換してプリンターに送信します。HPT 機能を使った LAN 直結印刷の場合も同様のコマンド変換を、OS/400 が行ないます。そのプログラムのソース・コードは共通という話を以前に聞いたこともあります。
ただ、実際には、両者の間には次のような違いがあります。

1. HPT 機能では、"AFP"プリンター用のデータを PAGES 形式に変換して、PAGES プリンターに印刷できますが、PCOMM 経由の印刷では対応していません。
"AFP"プリンターに関しては、AS/400 ユーザーのお客様では使用実績が多くないため、このブログでは触れませんので、ここで簡単にご紹介します。
InfoPrint4100


InfoPrint SP8200
"AFP(Advanced Function Presentation)"プリンターには、連続用紙対応の大型高速レーザー・プリンターや、カット紙対応の高速レーザー・プリンターがあります。高速印刷であることは、大量印刷を意味し、大量印刷であることは、ページ抜けや、重複ページの印刷の防止といった"印刷管理"機能を必要とす
ることを意味します。また、Windowsアプリケーションからの印刷のように自由な、文字の種類や大きさ、配置の印刷を、AS/400 から直接行なえるメリットがあります。
しかし、AS/400 にも対応する様々な"帳票ソリューション"(我がMapping Suiteもそうですが)が提供され、プリンターの状況監視も、TCP/IP の世界では"SNMP"プロトコルとそれに対応したツールが実現する今となっては、"AFP"の優位性も少なくなってしまったと言えるかもしれません。
リモートOUTQ の設定で、"メーカー・タイプ及び型式"に"*IBMPAGES300"を指定することで、印刷データが"AFP"プリンター用の場合は、OS/400 が、PAGES コマンドの中のイメージ送りコマンドに変換します。つまり、"AFP" のデータをイメージに変換して印刷する訳です。
この場合、LPR 印刷になりますから、本来の"AFP" プリンターで行なえたプリンターとの双方向通信による印刷管理はできません。プリンターの状態に関わりなく、印刷データを送信したら終了です。
2. "APW"やプリンター・ファイルで指定した次のパラメーターは、5577 形式や PAGES 形式への変換に制約があります。("APW"については、今後、機会を改めてご紹介します。)
  • "APW"のバーコード・パラメーター:PCOMM プリンター・セッションでは変換できません。HPT 機能を使った印刷では、"MRGAPW" の際の"DEVTYPE"に"*SCS"を指定し、HPT では "PAGES" モードへの変換を指定した場合のみ、変換されます。
  • 角丸付き罫線:PCOMM プリンター・セッション経由の場合は、"MRGAPW" の際の"DEVTYPE"に"*PAGES"を指定した場合のみ、HPT では "PAGES" モードへの変換を指定した場合のみ、変換されます。("DEVTYPE"は"*SCS"でも"*PAGES"でも共通)
  • 網掛け:PCOMM プリンター・セッション経由の場合は、"MRGAPW" の際の"DEVTYPE"に"*PAGES"を指定した場合のみ、HPT では "PAGES" モードへの変換を指定した場合のみ、変換されます。("DEVTYPE"は"*SCS"でも"*PAGES"でも共通)
  • 文字拡大(2 x 4 と 4 x 2): "DEVTYPE"で"*PAGES"を指定し、PCOMM プリンター・セッション経由の場合のみ変換されます。
  • 文字拡大(3 x 3):"DEVTYPE"で"*SCS"を指定し、HPT で "PAGES" モードへの変換を指定した場合のみ、変換されます。
  • 文字拡大(4 x 4):"DEVTYPE"で"*SCS"か"*PAGES"を指定し、HPT で "PAGES" モードへの変換を指定した場合のみ、変換されます。
上記以外の"APW"のパラメーターで通常使用されるものは、プリンター・セッション経由の印刷でも、HPT 機能を使った印刷でも変換されますので、コマンド変換で最も注意する必要のあるのは、バーコード・パラメーターになるのではないでしょうか ? 

2015年9月9日水曜日

HPT機能を使った印刷 - 簡単な双方向通信可能なOUTQを作る方式 -

前々回でお話ししたリモート OUTQ を作る方式は、単なる LPR 印刷なので、プリンターに対して印刷データを送信するだけの方式です。そのため、プリンターの電源が入っていなかったり、用紙切れが発生していても、それをエラーとして検知することはできません。今回、お話しする装置記述を作る方式では、TCP/IP の世界で定義された SNMP(Simple Netwrok Management Protocol)を使って、簡単なエラー状態を OS/400  が把握することができます。
注意 : 装置記述の作成は特殊権限が必要なので、ユーザーIDは、QSECOFR で行なってください。

1. 先ず、次の手順で装置記述を作ります。5250 端末画面で、"CRTDEVPRT"というコマンドを入力して F4 キーを押します。この画面で使用しているパラメーターは、次のようになります。
CRTDEVPRTを実行した画面-1
  • 装置記述 : 任意ですが、この名前はそのまま OUTQ の名前になります。(なお、ライブラリーは自動的に"QUSRSYS"になります。)
  • 装置クラス : "*LAN"が指定です。
  • 装置タイプ : "3812"が指定です。(余談ですが、3812 は1980年代中期に発表された英数データ用のページ・プリンターです。A4とレター・サイズの用紙に対応し、PCには"Proprinter"モードで接続し、他にホスト・システムにも接続可能なモデルでした。)
  • 装置形式 : "1"が指定です。

2. 実行キーを押して表示される画面で、"LAN接続機構"に"*IP"を指定してから実行キーを押すと、次の画面になります。パラメーターは次のように指定します。
CRTDEVPRTを実行した画面-2
  • ポート番号 : "9100"が指定です。
  • フォント 識別コード : "11"が指定です。
  • 用紙送り : 通常のカット紙用のレーザー・プリンターの場合は、"*AUTOCUT"が指定です。(連続用紙の場合は、"*CONT"になります。)
その下の"印刷装置エラー・メッセージ"が、デフォルトの"*INQ"の場合は、OS/400 にエラー・メッセージが通知され、メッセージ応答が求められます。"*INFO"に変更した場合は、エラー・メッセージが通知されるだけです。



3. パラメーターを入力したら、次ページの画面を表示します。"非活動タイマー"に"*SEC15"を指定してから実行キーを押すと、次の画面になります。
CRTDEVPRTを実行した画面-3
ここで重要なのが、"ホスト印刷の変換"です。"*YES"にすることで、OS/400 が印刷データを、その下の"メーカー・タイプ, 型式"で指定する形式の印刷データに変換して、接続先のプリンターに送信します。
"メーカー・タイプ, 型式"で F4 キーを押すと、前々回お話した、リモートOUTQ を作成する時と同じ選択肢が表示されます。
http://as400printhelp.blogspot.jp/2015/08/hpt-outq.html
ここでは、PAGES プリンター用として"*IBMPAGES300"を指定します。
なお、その下の"用紙入れ1、2"は給紙トレイ、"エンベロープ・ソース"は封筒用のトレイを意味しますが、まだ試してみたことがありません。

4. 次ページの画面ではパラメーターを次のように指定します。
CRTDEVPRTを実行した画面-4
  • リモート・ロケーション : プリンターのIPアドレスか、ホスト名を指定します。
  • システム・ドライバー・プログラム : これは"*IBMSNMPDRV"が指定です。この指定によって、OS/400 は、プリンターが"SNMP"の規格に従って把握している状態を知り、エラーの場合はエラー・メッセージを通知することになります。







5. 実行キーを押して装置記述が生成できたら、後は、"STRPRTWTR"コマンドを実行して OUTQ を使用可能な状態にします。

では、この OUTQ を使って印刷した場合、実際にエラーはどのように通知されるでしょうか ?
1. OUTQ "SP8200"のプリンターが、電源 OFF の場合
メッセージ : CPA3387 : (C R) 装置 SP8200 が使用できない
プリンターが電源OFFの場合

この後、プリンターの電源を入れて、"R"で応答すると、印刷可能になります。









2. OUTQ "SP8200"のプリンターが、用紙切れの場合
メッセージ : CPA405C : (C R) 装置 IP8200 の入力トレイに問題がある
プリンターが用紙切れの場合

この後、用紙を補給して、"R"で応答すると、印刷を再開します。
再開する開始ページを指定することはできませんが、プリンターの電源を切らない限り、プリンター内部のメモリーに保管されて印刷処理を待っているページから印刷再開しますので、問題は無いはずです。






3. OUTQ "SP8200"のプリンターが、用紙ジャムの場合
メッセージ : CPA404D : (C R) 装置 IP8200で用紙ジャムが起こった

この後、ジャムした用紙を取り除いてプリンターを印刷可能状態に戻して、"R"で応答すると、印刷を再開します。印刷開始ページを指定することはできませんが、プリンターの電源を切らない限り、プリンター内部のメモリーに保管されて印刷処理を待っているページから印刷再開しますので、問題は無いはずです。

2015年9月1日火曜日

HPT機能を使った印刷 - WSCSTについて-

"WSCST"(ワークステーション・カスタマズ・オブジェクト)とは、随分と長い名前ですが、OS/400 が印刷データを変換する時に参照するテーブル(対照表)のようなもので、ちょうど、プリンター・セッション経由(PDT 印刷)における PDF ファイルに相当するものです。PAGES モードのプリンター用のサンプルが、下記のサイトに、詳しい情報と共に掲載されていますので、ご参照ください。
http://www.ricoh.co.jp/pps/support/techinfo/dwgwscst_jp.html
PDF ファイルのように、使い方に合わせて編集するソース・ファイル
http://www.ricoh.co.jp/pps/download/txt/pages1_300.txt
の中をご覧いただくと、次のような箇所があります。
:INITPRT
      DATA ='1B7E010000'X                   /*初期化設定*/
            '1B7E0300013C'X                 /*行ピッチ設定6LPI */
            '1B7E02000132'X                 /*文字ピッチ設定10CPI */
            '1B7E5A000403AE0000'X.          /*コードページ変更942 */

この":INITPRT"で始まるこのブロックが、PDF ファイルの中の "START_JOB=" に該当します。
つまり、このサンプルでは、OS/400が変換した印刷データの先頭に、「初期化」「行ピッチ設定」「文字ピッチ設定」「「コードページ変更」コマンドを追加する指定となっています。
その他は、例えば
:ADDDRWTBL.
       :ADDDRWTBLE
           NUMBER = 3
           DATA = '1B7E4600050000030000'X.  /*用紙トレイ選択 第3*/
といったように、PRTF の中のドロワー(給紙トレイ)指定の各値を、PAGES モードのコマンドにどのように置き換えるかの指定だったり、
:ADDDRWTBLE
           NUMBER = 123                     /* B4縮小 縦*/
           DATA = '1B7E4600050000120000'X   /*用紙トレイ選択B4 */
                  '1B7E51000102'X           /*ページ様式設定 連→B4 */
                  '1B7E50000100'X           /*メディア座標原点 左上*/
                  '1B7E53000A00000000000000000000'X. /*論理原点 0, 0 */
といったように、ドロワーの値に"123"を指定すると、連続用紙サイズから B4 サイズに縮小し縦長に印刷する独自の設定を追加することができます。
もちろん、PRTF のパラメーターを活用できるようにまで WSCST を編集しなくても、":INITPRT" の中に指定のコマンドを追加するだけでも十分使用可能ですが、編集したテキスト形式のファイルをOS/400に送信して、CRTWSCST コマンドを使ってオブジェクトに変換しないとならない点が、PDF ファイルを PDT ファイルにコンパイルするよりも面倒かもしれません。
もっと簡単に使用するには、プリンターの初期設定(IP1000J PAGES モデルでは「PAGES 印刷条件」メニュー)で、縮小率や用紙方向を指定する方法でも良いわけです。

注意) IP1000J プリンター PAGES モデルでは、上記の":INITPRT" の指定では不十分で、実際に印刷させると、RPCS モードでのデータ・エラーが発生するという問題が発生しました。これは、プリンターが、PAGES モードに変換された印刷データを受信したにも関わらず、ドライバー印刷用の RPCS モードのデータと勘違いしてエラーになったのが、直接の原因です。そこで、印刷データの先頭にプリンターを PAGES モードに切り替えるコマンドを追加することで、この問題は回避できました。具体的には
:INITPRT
      DATA='1B7E12000111'X /* PAGES 選択     */
を追加しました。これはちょうど、PAGES 用の PDF ファイルの中の "START_JOB="の先頭にも
CDS EQU 1B 7E 12 00 01 11                       /* PAGES 選択     */
で定義された "CDS" があることと同じ原理です。