始めの言葉

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

2015年7月28日火曜日

プリンター・セッション経由の印刷 第4回 - 追加の設定 -

前回の続きですが、印刷の度に、START_JOB= 以下に記述したコマンドを印刷データの先頭に送信するようにするには、プリンター・セッションのワークステーション・プロファイルの編集が必要です。具体的には次の手順になります。
ワークステーション・プロファイルをメモ帳で開く
  1. コンパイルして作成されたPDTファイルを指定したプリンター・セッションを、独自の名前を付けて保管します。保管されるファイルが、ワークステーション・プロファイルと呼ばれるもので、拡張子は、".ws"です。私のPC上のCA V6.0では、C:\Users\ログイン・ユーザー名\AppData\Roaming\IBM\Client Access\Emulator\private に保管されています。
  2. プリンター・セッションは一旦閉じてください。
  3. このファイルをメモ帳等のテキスト・エディターで開きます。開くと表示のような画面が現れますので、その中に[printers]と書かれた行を見つけます。
  4. その下の行に Use_Default=Y という1行を追加します。
  5. そのファイルを上書き保存して、プリンター・セッションを起動してください。
この1行を追加することによって、プリンター・セッションからの印刷データの先頭には、毎回、自分で設定したコマンドが追加されて、プリンターに送信されます。

他に注意が必要なケースは、1ページの行数が66行を越えるデータの場合です。PDFファイルに戻りますが、メモ帳で開くと、/* Session Parameters */の直下に"MAXIMUM_PAGE_LENGTH=066"という行があります。この行の値が、デフォルトの"66"のままの場合、1ページの中のデータの行数が67以上あると、66行目までしか印刷されません。もし 1 ページに 66 行以上の行数がある場合には、この値を大きくしてください。なお、改ページする行数は、あくまでもプリンター・ファイルで定義されているのであって、ここの値ではありませんから、1ページの行数を越える大き目の値にしておけば良いわけです。

また、今までのトラブル対応の経験の中で判明した、追加設定には次のものがあります。これらは当時のPCOMMやCAのバージョンにおいて有効だったものですが、その後のバージョンでも通用するかどうかは、確認していません。
  • 透過(ASCII Transparent)モードを使用する場合
いずれもう少し詳しくご紹介しますが、5577 モードや PAGES モードの PC プリンターに印刷する場合に、AS/400上のスプール・データの中に、5577 モードや PAGES モードのコマンドを16進コードで埋め込むことができます。これを「透過モード」と言いますが、プリンター・セッション経由で印刷する場合には、次の設定が必要です。
- プリンター・セッションのワークステーション・プロファイルの中の[printer]の下に、 ATRN=Y を1行追加して、プリンター・セッションを再起動します。
  • 新JISフォントを内蔵していない古いモデルのプリンターで、新JIS並びの文字で印刷する
2015年4月13日の投稿で申し上げたように、新JISと旧JISで文字コードが入れ替わった文字の組み合わせが29組あります。
http://as400printhelp.blogspot.jp/2015/04/jisjis.html
現在使用されているプリンターで、新JISに対応していないような古いものは無いと思いますが、もし、そのようなプリンターでも新JIS並びに合わせた文字で印刷するには、次の設定を行います。
- プリンター・セッションのワークステーション・プロファイルの中の[printer]の下に、 OldJIS=Y を1行追加して、プリンター・セッションを再起動します。

2015年7月21日火曜日

プリンター・セッション経由の印刷 第3回 - PDFファイルのコンパイル -

PDFファイルの編集が完了したら、既存の PDF ファイルとは別名で、同じ"Pdfpdf"というフォルダーの下に保存します。次はこれを PDT ファイルにコンパイルすることで、初めて PDT 印刷に使用できるようになります。手順は次のとおりです。
"PDT の選択"ボタン
1. プリンター・セッションの画面でプリンター設定画面を開きます。

2. "PDT ファイルの使用"欄にチェックを入れて、"PDT の選択"ボタンを押します。









"PDF の変換"ボタン

3. "PDT ファイルの選択"画面が表示されるので、"PDF の変換"ボタンを押します。









PDF から PDT への変換

4. "PDF ファイルから PDT ファイルへの変換"画面が表示されるので、"Pdfpdt"フォルダーに保管した PDF ファイル(ここではpages.pdf)を指定して、"変換"ボタンを押します。





正しく変換された場合


5. "PDF ファイル変換ユーティリティー"の画面上で、"テーブルは正しくコンパイルされました"というメッセージが表示されたら、"OK"ボタンを押します。も し、エラーが発生したら、編集した PDF ファイルを開いて、中のコマンドや記述のしかた(1バイトずつスペースを挟んで記述されているか等)をチェックしてください。
生成された PDF の選択



6. "PDT ファイルの選択"画面が自動的に表示されるので、コンパイルされた PDT ファイル(ここでは pages.pdt、PDF ファイルと同じファイル名で、拡張子が pdt になります。)を指定して"OK"ボタンを押します。

編集した PDF ファイルをコンパイルして PDT ファイルを作成し、PDT 印刷用に指定するのはここまでですが、実際にはこれだけでは不十分なケースが多くあります。ほとんどのレーザー・プリンターでは、AS/400 からの印刷だけではなく、Windows のアプリケーションからのドライバー印刷にも自動切換えで使用されます。また、AS/400 からの印刷でも、全てが同じ余白の設定や縮小率の設定では対応しきれないので、何種類かの設定に対応するための PDT ファイルを用意して、それら PDT ファイルに1対1で対応するプリンター・セッションを切り替えて印刷するケースも多くあります。
ところが、PDT 印刷の標準では、PDF ファイルの中で指定した、印刷データの先頭に付加するコマンド
START_JOB=CDS INZ SEL SA4 FA4 SRO P10 LL6
は、1回しか印刷データに付加されません。そのため、例えば、pages.pdt を使ったPDT 印刷の後、Windows ドライバー印刷を行って、プリンターが Windows ドライバー用のモードに変わってしまうと、次の AS/400 からの印刷では、プリンターは Windows ドライバー用のモード のままで切り替わらない可能性が出てきます。また、同じ AS/400 からの印刷でも他の設定で印刷すると、その設定のままの状態となっています。
そこで、印刷データの先頭に付加したコマンドを、毎回、プリンターに送信する必要が出てきます。


2015年7月15日水曜日

プリンター・セッション経由の印刷 第2回 - PDFファイルの編集 -

前回お話したPDTファイルは、プリンター・セッションのプログラムが使用するものなので、中身は読めませんが、元になるPDFファイルは、ユーザーが自分の使用目的に合わせて編集できるようになっています。インパクト・プリンターを使用している場合には、通常はそのままの状態で使用しますが、独自に編集する必要があるのは、次のような場合が考えられます。
  1. 1ページの行数が66行よりも多いデータを印刷する。
  2. 前トラクターと後ろトラクターにそれぞれ2種類の連続用紙をセットして、それを操作パネルのスイッチを使って手動で切り替える代わりに、OUTQを選択することで自動的に切り替える。
これらに対応するための方法は、基本的にレーザー・プリンター向けの編集方法と考え方は同じですから、この後はレーザー・プリンターを使用する際の編集方法に話を進めます。
レーザー・プリンターは、ページ・プリンターという呼び方もあるように、ページ単位で印刷処理します。つまり、プリンター内で1ページ分の印刷データが準備できてから印刷動作を開始します。その結果、インパクト・プリンターではできない
  • 縮小印刷
  • 用紙方向の縦長・横長指定
という機能がありますし、更にカット紙用のレーザー・プリンターでは
  • 用紙トレイ選択・排紙トレイ選択
  • 両面印刷(長辺綴じ・短辺綴じ指定)
  • 上下左右の余白設定
といった機能を持っていて、これらを組み合わせた設定をPDTファイルに組み込むことで、自動的に希望の印刷結果が得られるようになります。
では、早速、PAGESモードのプリンター用のPDFファイルを使ってご説明します。PAGESモード用のPDFファイルは、PCOMMやCA標準の ibm5585.pdf を元に作られたものが、下記のサイトで公開されています。
http://www.ricoh.co.jp/pps/download/utility/pdt_pdf.html
このファイルを PC にダウンロードして、メモ帳等のエディターで開きます。(ダブル・クリックするとAdobe Reader が起動してエラーが表示されますので、ご注意ください。)
上から順番に見ていくと、すぐに"BEGIN_MACROS"があります。
(/*と*/で挟まれた部分は、コメント・アウト、つまり説明用のテキストで、機能には関係しません。)
初めの"NUL EQU 00"は、このPDFファイルの中では、"NUL"という3文字は、16進コードのコマンド"00"を表わしているという定義になります。つまり、任意の英数3文字 EQU(Equal イコール)16進コードのコマンドという書き方で、コマンドを英数3文字に置き換えているわけです。更に先を見ると、PAGES独自のコマンドの例として、用紙方向横長指定として、SRO EQU 1B 7E 50 00 01 03 と書かれた行があります。これは、SRO は、16進コードのコマンド 1B 7E 50 00 01 03 を置き換えるという意味になります。
AS/400から送られる印刷データの先頭に、これらのコマンドを追加するための指定は、"BEGIN_MACROS"の先にある
/*                     Control Codes                                  */
の直下の START_JOB= の行で行います。デフォルトで記述されている
START_JOB=CDS INZ SEL P10 LL6
は、
CDS(Change Data Stream)プリンターをPAGESモードにセットする -> INZ(Initialize)初期化する -> SEL(Select)印刷可能状態にする -> P10 文字ピッチを10cpiにする ->LL6 行ピッチを6lpiにする
という順番でプリンターにコマンドを送ることを意味しています。そこで、この行を、その下にコメント・アウトされているサンプル
START_JOB=CDS INZ SEL SA4 FA4 SRO P10 LL6
に置き換えると、プリンターをPAGESモードに設定し(CDS)、A4用紙のトレイから給紙して(SA4)、連続帳票からA4への縮小(FA4)して、印刷する設定になります。
なお、細かい話ですが、PAGESの場合、トレイ指定コマンド(ここではSA4)と、縮小コマンド(ここではFA4)は、この順番で記述しないと指定が有効になりませんので、ご注意ください。
また、余白の設定を併せて行うとすると、少し難しくなります。MACROの中に「余白ヘッダー部」として"MRG"があります。これを使うのですが、これはヘッダー部だけ、つまり何ミリにするかという値が含まれていませんので、START_JOB=の後ろに組み込む時に MRG の後ろに値を追加する必要があります。
余白の値は、値(ミリ)をインチに換算した値 x 1440を16進数にした値を、1バイトずつスペースで区切って記述します。例えば、用紙方向横長で、上余白10mm、左余白15mmに設定するには
  1. 上余白の値の計算 10mm÷25.4mm/インチx1440 = 567 -> 16進に換算= 0237 
  2. 左余白の値の計算 15mm÷25.4mm/インチx1440 = 850 -> 16進に換算= 0352
  3. 用紙方向横長のMACROは SRO
  4. MRGの後ろに左余白、上余白の順で1バイトずつブランクを挟んで記述します。
START_JOB=CDS INZ SEL P10 LL6 FB4 SB4 SRO MRG 00 00 03 52 00 00 02 37 00 00
 

このコマンドで設定した余白の値は、プリンターの操作パネルから初期設定で指定した
余白の値の影響は受けません。

余白の値の定義

2015年7月8日水曜日

プリンター・セッション経由の印刷 第1回 - PDT印刷とは -

前回までのお話で、ポートの設定もできたので、次はいよいよ、プリンター・セッションのお話にしたいと思います。PCOMMやクライアント・アクセス(以降CA)、あるいはIBM製以外のエミュレーターでも考え方は同じで、プリンター・セッション経由の印刷には、
  • プリンター・セッションが印刷データを生成する方式
  • 一般的な Windows のアプリケーションと同様に、プリンター・セッションが、Windowsとデータのやり取りをして、プリンター・ドライバーが印刷データを生成する方式
の2種類の方法があります。前者はPCOMMやCAでは、「PDT印刷」と呼ばれています。PDT とは、Printer Definition Table の略で、5577 用の場合には、AS/400から送信されてくる文字コードをEBCDIC から Shift-JIS へ、制御コマンドは SCS形式から 5577形式へ変換するための参照テーブル(表)を意味しています。つまり、この表を参照しながら、プリンター・セッションがAS/400からの印刷データを 5577系のプリンターで印刷可能なデータ形式に変換する訳です。
PCOMMやCAには標準で用意されている PDT には、日本語対応のものは
  • 5577
  • ESC/P
  • PAGES
  • LIPS III
英語対応のものは
  • PPDS(IBMプロプリンター)
  • PCL
  • Basic ASCII
  • EPSON
 となっています。
標準添付されているPDTファイル
添付の画面は、CA V.6のフォルダーとファイルの構成ですが、"Pdfpdf"というフォルダーの中にこれらの PDT ファイルが用意されています。この中で、"PAGES"プリンター用に使用するのは、”ibm5585.pdt"です。"ibm5587.pdt"は古いバージョンで、これを指定すると正しい印刷結果が得られないことがありますので、ご注意ください。
"ibm5577b.pdt"に関しては、かつて、このPDTを指定すると、罫線印刷用の SCSコマンドを 5577 用の罫線コマンドに変換できたというお客様からの情報をお聞きしたことがありますが、PCOMMやCAのバージョンが変わると変換できなかったこともありましたので、現時点では"ibm5577.pdt"との違いは無いと思われます。

プリンター・セッションのPDT印刷の設定方法は、プリンター・セッションの画面で、「停止」ボタンを押して「作動可能」ランプを緑から黒に変えた後、「ファイル」->「プリンター設定」を選択して表示された画面(添付)で、「PDTファイルの使用」欄にチェックを入れます。そうすると、「PDTの選択」ボタンが使える状態に変わりますので、このボタンを押します。
プリンター設定画面

PDT選択画面

そうすると、左のような「PDTファイルの選択」画面が表示されますので、使用するプリンターに合わせたPDTファイルを指定して、保存します。
インパクト・プリンターを使用する場合には、通常はこの設定だけで終了ですが、レーザー・プリンターの場合には、「縮小」や「両面印刷」といったプリンター制御のための設定が必要になります。そのためには、「PDFファイル」を編集して、それをPDTファイルにコンパイルする必要がありますが、その方法は次回にお話します。

2015年7月1日水曜日

繰り返し印刷の対策

Windows から LAN 接続されたインパクト・プリンターで印刷する際に、繰り返し印刷が発生する原因は、端的に言えば、Windows の標準TCP/IPポートが、プリンターからの印刷完了の通知(Ack)を待つ時間(Time Out)が、インパクト・プリンターにとっては短いことです。
では、対策は、待ち時間を大きな値に変更するということになりますが、私の知る限りでは、 Windows7 や WindowsServer2008 までは、変更する方法が見つかりませんでした。そこで、ポートを「UNIX印刷サービス LPRポート」に変更する -> レジストリーの編集によって、LPRポートの待ち時間を変更するという方法が考えられました。
元々 Windows では、LAN 経由の印刷用ポートとしては、この「LPRポート」が標準でした。しかし、下記のマイクロソフト社のページの情報にあるように、使用するポートの数が11個までとなっていたため、12個目の印刷ジョブの開始までに待ち時間が発生するという問題が発生しました。
https://support.microsoft.com/ja-jp/kb/179156/ja
その問題の解決のためには、記載されているように、レジストリーの編集が必要だったため、その必要が無い「標準(Standard)TCP/IPポート」が、新たに標準となったという経緯があります。
これは全く私の想像ですが、Windows の開発を行っているMS社があるUSでは、最早インパクト・プリンターは日本に比べて圧倒的に台数が少ないので、テストの対象になっていなかったのではないでしょうか?
設定の大まかな流れとしては、次のようになります。
  1. Windows 上の「Windows の機能の有効化または無効化」を使って、「LPD印刷サービス」「LPRポート モニター」を追加する。
  2. ドライバーのポート画面で「ポートの追加」を選択すると、「LPR Port」が追加されているので、これを使用して「LPRポート」を設定する。(ここで、「サーバーのプリンター名または印刷キュー」を入力する必要があります。基本的にはプリンターのLANカード固有の値になりますが、多くのケースでは「lp(半角小文字エルピー)」が使用できるようです。)
  3. PCの再起動を不要とするため、コマンド・プロンプト画面で「net stop spooler」と入力する。
  4. レジストリー・エディターを起動して、2 で追加した「LPRポート」のタイム・アウト値を変更する。(デフォルトは300秒 = 5分となっていますが、この値を大きくしても副作用は無いと思われますので、思い切って大きな値に変更しても良いと思います。)
  5. 併せて、11個までのポートの制限を外す編集を行います。
  6. レジストリー・エディターを終了して、コマンド・プロンプト画面で「net start spooler」と入力します。Spooler サービスの起動が確認できたら、終了です。
画面イメージ付の詳細な手順は、下記のサイトにありますので、ご参照ください。
http://www.ricoh.co.jp/pps/download/pdf/windows_lpr_jp_win7.pdf