始めの言葉

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

2018年5月26日土曜日

AS/400 プリンティングに求められるソリューション 第39回 - ROBOTを使った処理の自動化 - 2 -

前回から、Mapping を使った PDF 生成などの自動化等を、OS/400 上に組み込むための手段の1つである "ROBOT" の使い方のお話を始めました。そして、そのための初めの一歩として、"入力/出力の出力待ち行列の関連定義" を行いました。
次は、"3. スプール・ファイルとアクション間の関連定義" を行います。

そのためには、Mapping メイン・メニューで "14. オペレーション・メニュー" を選択して実行します。
Mapping メイン・メニューで 14 を選択
表示された画面で、"3. スプール・ファイルとアクション間の関連定義"を指定して実行します。
Mapping オペレーション・メニューで"3."を選択する
ここでは、"STD132P" という名前のスプールに対して、PDF ファイルを生成するという処理を定義することにします。次のような画面が表示されますので、最上段の行に左から、"1= 作成"、"スプール・ファイル = STD132P"、"ジョブ", "ユーザー・データ”, ”用紙タイプ", "ページ幅" には "*ALL"、"ACTION = STD132PDF" を入力して実行します。
このアクション名 "STD132PDF" は、任意です。アクションの内容は後で定義します。
また、使用できる文字は半角英数文字のみで、全角文字は使用できない点にもご注意ください。
3. スプール・ファイルとアクション間の関連付け定義の画面例
これは、一種のフィルターのような役割をしています。つまり、前回、ROBOT が開始する対象とした "DEMOOUT" という OUTQ に投入された様々なスプールの内、スプール・ファイル名が "STD132P" でさえあれば、ユーザーやジョブ等には関わらず、必ず "STD132PDF" という処理を行うという定義を行ったということです。

実行キーを押して登録した後、"OPT" 欄に "9= その他"を入力して実行キーを押すと、次のような画面が現れます。
スプール・ファイルに対するその他のパラメーター
この画面では、次の値を使ってアクションを適用するかどうかを選別する定義を行えます。
- スプール・ファイルの作成に使用したプログラム名とライブラリー
- スプール・ファイルの作成に使用したプリントファイル名とライブラリー
- 入力OUTQ 名とライブラリー
- ユーザーテキスト
上の画面は初期設定のままですが、"Outq In" は “*DFT(デフォルト値)" となっています。これは、前回の設定で監視対象とした "DEMOOUT" という OUTQ を意味しています。この値を変更すると、"ROBOT" が監視する OUTQ を変更することができます。特定の OUTQ に入ってくるスプールに対してだけ、特定の処理がしたい場合などに有効です。

同様に、"OPT" 欄に "8= 詳細" を入力して実行キーを押すと、次のような画面が現れます。
アクションの詳細画面例
この画面上で値を変更すると、アクションを実行する時にその値が適用されます。例えば、"出力待ち行列" 欄の値を "*DFT(デフォルト値)" から変更すると、"4.入力/出力の出力待ち行列の関連定義" で定義した出力 OUTQ の代わりに、ここで指定した OUTQ が使用されます。
実使用上で重要なのは、"Priority" 欄の設定です。これは、ROBOT サブシステム内で実行される Mapping 処理ジョブの制御を行うためのものです。
デフォルトでは、"MAPDMIDDLE" となっていますが、他に "MAPDSPEED"、"MAPDSLOW" を選択できます。
それぞれ、次のような違いがあります。
- MAPDSPEED : 実行優先順位 = 20, 最大同時実行ジョブ数 = 1
- MAPDMIDDLE : 実行優先順位 = 30, 最大同時実行ジョブ数 = 5
- MAPDSLOW : 実行優先順位 = 50, 最大同時実行ジョブ数 = 10
OUTQ にスプールが投入された順番どおりに、アクションが実行される必要がある場合には、"MAPDSPEED" を選択して、同時実行ジョブ数を "1" とします。

2018年5月19日土曜日

AS/400 プリンティングに求められるソリューション 第38回 - ROBOTを使った処理の自動化 - 1 -

MAPCPYSPLF コマンドを実行して PDF ファイルを生成し、それを OUTQ を通して MVP をインストールした PC に送信して、プリンターから印刷するという一連の流れを見てきました。しかし、実環境においては、毎回コマンドを人間が操作して処理するということは無く、ユーザーが OS/400 上のアプリケーションのメニュー画面でデータを生成し、印刷指示するだけで、自動的に印刷が行われないとなりません。
もちろん、MAPCPYSPLF コマンドや、MAPIFS2PRT コマンドを、既存の CL の中に組み込むことで実現しても良いのですが、Mapping ではアプリケーションを変更せずに業務改革を実現することを志としていますので、ROBOT(ロボット) というサブ・システムを標準で用意しています。
ROBOT とは、大まかに言うと、次のような仕組みです。
- ROBOT が常時監視する対象の OUTQ を定めます。
- その OUTQ に、アプリケーションからスプールが投入されると、予め設定しておいた条件に合致するものに対して、やはり、予め定義しておいたアクション(処理)を行います。

従って、ROBOT を使うと、アプリケーションからスプールを投入する先の OUTQ を ROBOT が監視する別の OUTQ に変更する、あるいは、アプリケーションからスプールが投入されている元々の OUTQ を ROBOT の監視対象とする、それらのどちらかによって、Mapping を使った処理に移行できるわけです。
しばらくは既存の印刷も残しておいて、Mapping による処理と共存させる場合には、前者の方法が適していると思います。

では、これから ROBOT の設定を行っていきましょう。
Mapping メイン・メニューで "14. オペレーション・メニュー" を選択して実行します。
Mapping メイン・メニューで 14 を選択
表示された画面では、4 -> 3 -> 2 -> 5 と言う順番に進みます。そこで、"4. 入力/出力の出力待ち行列の関連定義" を選択して実行します。
Mapping オペレーション・メニューの画面
表示された画面で、キーボードの "F6" キーを押してから、次の画面のように、2種類の OUTQ (上段)とそのライブラリー(下段)、それと DTAQ(上段)とそのライブラリー(下段)を入力して、実行します。
- ROBOT が監視する "OUTQ 元"
- ROBOTが処理して生成されたスプールが書き出される "OUTQ 移動先"(実際には使用しない場合がほとんどなので、任意の OUTQ で構いません。)
- データのやり取りに使用される "DTAQ"
入出力待ち行列の関連付けの画面例
DTAQ 作成の確認画面例

 "DTAQ" は予め定義しておかなくても、実行キーを押すと、上の画面のように "確定してください" という確認のメッセージが表示されますので、そのまま実行すると設定完了です。その結果は、次の画面のように表示されます。

関連付けを定義した後の画面例
これで、ライブラリー "DEMOLIB" にある "DEMOOUT" という OUTQ を ROBOT の監視対象と定義することができました。

2018年5月13日日曜日

AS/400 プリンティングに求められるソリューション 第37回 - MVPを使ったPDFの自動印刷 - 3 -

MVPを使った自動印刷は、プリンターの種類を問わない点は便利ですが、Windows PC 経由であることや、Adobe Reader に依存する印刷になるので、運用上の注意点があります。技術的に細かい話で恐縮ですが、以下に整理します。
1. 印刷順序
前回お話したように、"AcroRd32.exe" を実行する際のオプションに "/n" を指定していると、複数の PDF スプールの印刷を並行処理しますので、後から受信した PDF スプールのサイズの方が小さいと、その前の PDF スプールよりも先に印刷されてしまうという現象が発生する可能性があります。PDF スプールの送信順通りの印刷が必要な場合は、"/n" は指定しないようにしてください。
そして、MVP の設定変更を行います。
MVP をインストールしたフォルダー(例:C:\MVP)の下のフォルダー(\MappingSpooler)にあるファイル MVPconf.iniファイルをメモ帳で開きます。下から 3 行目の KillProcessIfNeed の値を 1 に変更して、上書き保存します。これによって、1つの PDF スプールを印刷した後、MVP は毎回、Adobe Reader を終了します。
MVPconf..ini ファイルの例

2. Adobe Reader のセキュリティ設定
MVP のマニュアルには詳細を記載していますが、Adobe 社の公開情報によると、悪意のある PDF ファイルが任意の実行可能ファイルを起動したり、システム・ディレクトリーやWindows レジストリーに書き込んだりすることを防ぐために、バージョン X から”保護モード”という機能が追加され、デフォルトでは有効化されています。その影響で、 MVP はサービス・モードで使用できなくなります。そこで、MVP をサービス・モードで使用するには、Adobe Reader の環境設定メニューで”保護モード”を解除する必要があります。
ただし、そうすると、同じ PC で Mapping が生成した安全な PDF ファイル以外の PDF ファイルに対しては、上記のようなリスクが存在することになります。MVP をサービス・モードで使用するかどうかは、Mapping が生成する以外のPDFファイルを扱う可能性と、上記のリスクを考慮して、総合的に判断してください。
Adobe Reader DC の環境設定画面

3. PDF に合わせた用紙サイズで印刷する
同じプリンターに対して印刷させる PDF ファイルでも、使用する用紙サイズが異なることは、当然あります。用紙サイズに合わせて MapDraw を使って帳票設計し、それを使って Mapping が生成した PDF ファイルを MVP 経由で正しい用紙サイズで印刷させるには、Adobe Reader 側の設定を次のように変更しておく必要があります。そうしておかないと、用紙サイズ毎に異なるプリンターを MVP 上で登録し、OUTQ もそれに合わせて用紙サイズ毎に作って、使い分けないとならなくなります。
そこで、先ず、Adobe Reader で PDF ファイルを開きます。次に、"ファイル"->"印刷"を選択して開いた画面で、"ページサイズ処理" に "実際のサイズ" を指定し、"PDFのページサイズに合わせて用紙を選択" にチェックを入れます。この設定で、一旦、"印刷"ボタンを押して印刷させると、この設定が保存されます。
Adobe Reader DC の印刷設定画面
4. PC の定期的な再起動
MVP が稼動する PC では、稼働中は \MappingSpooler\spool\プリンター名 フォルダーの下に PDF スプールが溜まっていきます。従って永い間 PC を再起動しないでおくと、溜まった PDF スプールの影響で、PC の動作が遅くなるという現象が見られることも出てきます。
それを回避するために、主として MVP を使用する目的で PC を設置されたお客様の場合、1 週間等の決まった間隔で自動的に再起動するように設定されていることがあります。その場合、MVP の \MappingSpooler フォルダーの下にある spool.list ファイルの問題で、 MVP にエラー・メッセージが表示され、印刷できないという現象が報告されています。
そのようなケースでは、次の点をチェックしてください。
- 対策を行ったバージョンである MVP の最新版は、 V.7.1.0.35583 です。このバージョンのインストール・プログラムを実行して、途中 Repair を選択すると、導入済みの MVP は最新版に更新されます。
- このバージョンでは、プリファレンス設定メニューの中に、印刷後に PDF スプールを削除する設定が追加されています。削除までの時間も調整可能になっています。
- Windows10 等、Windows7 以降の Windows では、MVP は必ず管理者権限で実行してください。特に、自動的に起動する設定の中では、管理者権限で MVP が起動するように設定することが重要です。具体的には、Windows のタスク・スケジューラーにおいて、"タスクの作成" メニューの中の "全般" 画面で、"名前" 欄に "MVP""を指定し、"最上位の特権で実行する" にチェックを入れて、"構成"を "Windows 7Windows Server 2008 R2" に変更します。
Windows タスク・スケジューラーの画面

- 再起動のために、Windows がシャット・ダウンする前に、MVP を終了させることが重要です。MVP がまだ spool.list ファイルに書き込み中に PC が終了してしまうことも、上記のエラーの一因となっています。そこで、GUI モードで使用している場合には、
taskkill /F /IM MappingVirtualPrinter.exe /T
というコマンドを、シャットダウン前に実行するように設定してください。

2018年5月2日水曜日

AS/400 プリンティングに求められるソリューション 第36回 - MVPを使ったPDFの自動印刷 - 2 -

プリンターの登録は、"サーバーの構成"という、次のような設定画面で行います。
サーバーの構成画面
- バーチャル・プリンター名
登録されたプリンター毎に任意の名前を付けますが、重要な点は、英数半角大文字であることと、この名称がここで登録したプリンターへ印刷させるための "OUTQ" のパラメーターの "リモート印刷装置待ち行列"と一致させることです。
CRTOUTQコマンドの1画面目

MVP 経由の印刷の場合、このバーチャル・プリンター一つ一つに対して、OS/400 上に "OUTQ" を作成します。それによって、OS/400 上の通常の印刷の操作と同様に、OUTQ に対して PDF のスプールを解放することによって、OUTQ に紐付いたバーチャル・プリンターから印刷されるという仕組みです。そして、OUTQ とバーチャル・プリンターを紐付けるのが、この"リモート印刷装置待ち行列"です。

- ローカル・プリンターの設定
実は、MVPでは、PDF スプールを "Adobe Reader" とプリンター・ドライバーの組み合わせで印刷する機能の他に、PCL モードを持つプリンターに印刷するとか、OS/400 から送信されてくる印刷データをそのまま LPR 印刷するといった機能も持っているのですが、どちらも実際に使用するケースは、ほぼ無いと言えます。
そこで、"プログラムを使って印刷する" を選択し、プログラムには、Adobe Readerの実行プログラムである "AcroRd32.exe" を指定します。Adobe Reader のバージョンが変わっても、AcroRd32.exe という名称は変わっていないようですが、フォルダー名は変化しています。従って、同じ PC に導入されている Adobe Reader のバージョンに応じたフォルダー名を指定するよう注意が必要です。上の画面サンプルでは、バージョンは "DC" なので、次のような指定になっています。
"C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /n /t /h %1 %2 %3 %4
後ろに付いているオプションについては、Adobe 社のサイトで次のように説明されています。

/n : すでに Acrobat を起動している時に、別のインスタンスとして Acrobat アプリケーションを起動 <- 複数の処理を並行して行うことになるので、ページ数の多い PDF スプールの方が、ページ数の少ないものより印刷が後回しになる可能性があります。印刷の順番を重視する場合には、これは指定しない方が良いと思います。

/t : AcroRd32.exe /t path printername drivername portname
Adobe Reader を起動し、印刷ダイアログボックスを表示せずに PDF ファイルを印刷し、Adobe Reader を終了する。

/h : Acrobat を起動するが、表示しない。(メモリ上にロードするのみ) <- このように説明されていますが、私の経験では、/h を指定していても、GUI モードの場合は、一瞬、Adobe Reader で PDF ファイルを開いた画面が表示されます。

"ローカル・プリンター" 欄は、プリンター・ドライバーを選択するようになっています。選択肢として出てくるプリンターは、MVP が稼動する PC に設定されているプリンターそのものです。
もし、同じプリンターで印刷するにしても、例えば、片面印刷する時と両面印刷する時、あるいは、何種類かの給紙トレイを選択して印刷する場合には、同じドライバーをコピーした後、プロパティをそれぞれの設定に合わせた上で、別々のプリンター名を付けて保存します。MVP 上では、それぞれのプロパティを持ったプリンター名のドライバーを指定したバーチャル・プリンターを登録します。
それによって、OUTQ を指定することによって、自動的に両面印刷や片面印刷、給紙トレイを指定した印刷が可能になります。
なお、Windows 上で設定するプリンター名も、英数半角文字であることが必要な点にご注意ください。

MVP の導入直後は、下端に表示されている"デフォルトで印刷ジョブを保留する"にチェックが入っていることがあります。そのままにすると、MVP 上で PDF スプールが滞留し、印刷されませんので、このチェックは外しておく必要があります。なお、この設定は、導入し設定した後で、印刷テストを行う際に、印刷ジョブを保留する方が、印刷することによる用紙の消費を防ぐためにあります。