始めの言葉

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

2018年6月23日土曜日

MapDraw を使った帳票設計のテクニック 第1回 - 2up 指定 - 1 -

今回からは、MapDraw を使ってできる少し高度な帳票設計方法をご紹介していきます。
初めは、"n-up" の指定方法です。集約印刷という言い方もしますが、1 つの面に複数のページ、例えば、2 ページ、4 ページといった偶数のページを縮小して印刷することを指します。印刷した時の紙の枚数を節約するために使用されますが、当然、集約するページ数が多くなるほど文字の大きさは小さくなりますので、A4 サイズ用紙なら、2 面が一般的と思います。
通常は、印刷する際に、レーザー・プリンターや複合機のドライバーのプロパティ画面で指定しますが、PDF ファイルで電子保存する場合には、帳票設計の段階で指定する必要があります。Mapping V6 では未対応だったので、お客様には、スプールの段階で奇数ページ毎に改ページを外す処理を行ってくださいとお願いしてきました。しかし、V7 ではこれからご紹介する方法で対応できるようになりました。
ただし、Mapping の処理数は、生成される XPS ファイルのページ数になるとご案内してきましたが、この n-up 処理の場合には、生成されたページ数ではなく元のスプールのページ数になります。従って、処理数の点では節約にはならないということになります。

では、2 ページを 1 ページに集約する設計を例にして具体的な手順をご紹介します。
先ず、集約後をイメージした 2 つのフォーマットを作成します。具体的には次の手順で行います。
1. A4 サイズ縦長の 2 ページを A4 サイズ 1 ページに集約すると仮定して、集約後のフォーマットは、A4 サイズ横長とします。そして、左半分に奇数ページ、右半分に偶数ページを表示します。そのために、奇数ページ用のフォーマットと、偶数ページ用のフォーマットの 2 つのフォーマットを作成します。その際に、フォーマット名は同じ名前、シーケンス番号は、それぞれ "00010"、"00020" とします。
奇数ページ用のフォーマットの設定
偶数ページ用のフォーマットの設定
2. 奇数ページ用の、シーケンス "00010" のプロジェクトのプロパティ画面、右下にある "詳細" ボタンを押します。
プロジェクトのプロパティ画面の詳細ボタン

3. 表示された画面で、"改ページ" 欄のチェックを外します。そうすると、"配置" 欄が指定できるようになりますので、"垂直" を選択して保存します。
奇数ページ用の設定
4. 偶数ページ用の、シーケンス "00020" のプロジェクトのプロパティ画面で、"言語" を一旦、"PCL5" に変更してから、右下にある "詳細" ボタンを押します。表示される "拡張プロパティ" の画面で、"ページ定義" と "オーバーレイを呼び出す" のチェックを外します。
偶数ページ用の設定
5. "OK" ボタンを押して画面を閉じたら、"言語" を "XPS" に戻します。
6. これら奇数ページ用と偶数ページ用の 2 つのフォーマットを適用する条件を設定します。そのためには、プロジェクトのプロパティ画面で、"表面" タブを選択して、その画面を表示させます。条件として、"Page" を指定し、奇数ページ用のフォーマットでは、値として "1 of 2" を指定します。同じように偶数ページ用のフォーマットでは、"2 of 2" を指定します。
奇数ページ用のフォーマットの条件

7. プロジェクトのプロパティの設定は以上です。サンプルの設計なので、本格的なオーバーレイ(罫線や固定文字、ロゴ等)は省きますが、左右中央に左右の各面の境界となる縦線のみ、DrawF の画面で引いておきます。(片方のフォーマットに左右中央、1485.0 10/mm の位置に縦線を引いたら、もう片方のフォーマットにそれをコピー&ペーストします。)
境界の縦線を追加
次回は、MapF 画面の設計を行います。

2018年6月16日土曜日

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

前回までのお話で、予め定義した条件に合致するスプールが OUTQ に投入されたことを ROBOT が検知すると、予め定義したアクションが実行されるという、Mapping を使った処理の自動化を行う過程をご理解いただけましたでしょうか?
お話した例では、最終的に、"スプール・ファイル名.pdf" というファイル名の PDF ファイルが、IFS 上の特定のフォルダーに生成されたわけですが、通常の業務に使用するには、これでは不十分です。
例えば、次のような課題があります。
- スプール・ファイル名は一定の名前なので、"スプール・ファイル名.pdf" というファイル名では、PDF ファイルが生成される度に上書きされてしまう。例えば、システム時間、それも秒単位のタイム・スタンプの値を含む PDF ファイル名にする必要がある。
- 生成した PDF ファイルは印刷するので、ファイル・サーバーに転送する必要はないが、再印刷できるようにするためには、短期間、IFS 上に保存しておく必要がある。そのためには、やはり PDF ファイルには固有のファイル名を付ける必要がある。
- IFS 上に PDF ファイルが保存されていくだけでは、AS/400 の HDD を圧迫してしてしまう。そこで、PDF ファイルが生成されたら、ファイル・サーバーに FTP 転送して、IFS 上からは削除する必要がある。

"MAPCPYSPLF" コマンドを使って PDF ファイルを生成する時のファイル名に組み込める値に使用できる "ROBOT変数" には、"- ROBOTを使った処理の自動化 - 3 -" でお話したもの他に、次の変数があります。
&MAPNAM : Mapping フォーマット名をセットします。
&MAPSEQ : Mapping フォーマット・シーケンスまたは処理モードをセットします。
&MAPMOD : 処理モードをセットします。
&MAPSUP : 元のスプール・ファイルを削除するかどうかセットします。
&MAPSAV :マッピングされたスプール・ファイルを保存するかどうかをセットします。
&SNDFDP : オーバーレイを送信します。
&SNDPOL : フォントを送信します。
これらを見るとお分かりのように、スプール毎に変化するような値は見当たりません。

そこで、タイム・スタンプを含んだファイル名を持つ PDF ファイルを、ROBOT を使って自動的に生成させるには、CL なり、RPG を使って PDF ファイルを生成するたプログラムを用意します。そして、そのプログラムをアクションとして定義します。アクションの定義では "- ROBOTを使った処理の自動化 - 3 -" の中でお話した手順を繰り返すことにより、複数のステップを定義することができますが、残念ながら "ROBOT変数" 以外の変数はステップを跨って有効になることがありません。そのため、変数の定義から始まって、その変数を使った処理までカバーする 1 本のプログラムを CALL するように定義します。
DEMOLIB にある MAPPOPC というプログラムを Call するアクション
PDF ファイルをファイル・サーバーに FTP 転送する際も、同様の考え方で対応します。

2018年6月9日土曜日

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

前回までで、ROBOT の設定が終わりましたので、実際に ROBOT を動かして、PDF ファイルができるかどうかを試してみましょう。
ROBOT を開始するには、Mapping メイン・メニューで、"14. オペレーション・メニュー" を選択してから、"5. ROBOT の処理" を実行します。
次のように表示された "ROBOT メニュー" の画面にある "1. ROBOT の開始" を実行します。
ROBOT メニュー画面
次の画面では、ROBOT を実行する際のログを取得しておくかどうかが聞かれます。初めて ROBOT を設定して稼動テストを行うのですから、次のように "*YES" に変更して実行キーを押します。なお、この画面で表示されているように、コマンドを使って ROBOT を開始するには "STRRBT" というコマンドを使用します。
ROBOT の開始画面
この画面で実行キーを押すと、ROBOT は動き始めるのですが、画面は元の "ROBOT メニュー" に戻るだけで、実際に動いているかどうか不安です。
そこで確かめる方法は、2 つあります。1 つは、この画面で "4. ROBOT の状況の表示" を実行する方法です。
ROBOT の状況の表示を選択
すると次の画面が表示されます。"状況" 欄が、"ACTIVE" と表示されていれば、無事稼動していることを表します。
ROBOT の状態表示画面
なお、この画面の "OPT" 欄に "3= 保留" を指定して実行すると、次の画面のようになり、ROBOT の活動を保留できます。
ROBOT を保留した結果
同様に "2= 変更" を指定して実行すると、次のような画面が表示されますので、ジョブの優先順位を変更することができます。
JOB 変更の画面
"5= 処理" を指定して実行すると、次のような画面が表示されますので、ジョブ・ログの表示も可能です。
JOB の処理画面
もう一つの方法は、"WRKACTJOB" コマンドを実行する方法です。実行すると、次のように "サブシステム/ジョブ" 欄に ROBOT が表示されます。
WRKACTJOB コマンドを実行した画面
前回のお話で定義したアクションの中で、PDF ファイルは、IFS 上の "/map34806/mapping/test/" フォルダーの下に、"&SPLF.pdf" つまり "スプール名.pdf"という名前で生成することになっていました。"/map34806/mapping/test/" フォルダーの下にファイルが無いことを確認します。
"/map34806/mapping/test/" フォルダー
ROBOT が稼動していることを確認したら、ROBOT が監視している OUTQ にある、PDF ファイルを生成する対象となっているスプールを一旦 "保留" 状態にしてから "解放" します。そうすると、空だった"/map34806/mapping/test/" フォルダーに "STD132P.pdf" という PDF ファイルが生成できたことを確認できました。
"STD132P.pdf" という PDF ファイルが生成できた






2018年6月2日土曜日

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

前回の "3. スプール・ファイルとアクション間の関連定義" の中で、名前だけ定義した "アクション” の内容を定義します。
前回でアクション名は、既に "STD132PDF" と決めています。この名前のアクションの内容を定義するには、Mapping メイン・メニューで "14. オペレーション・メニュー" を選択して実行した後、表示される "オペレーション・メニュー" の中の "2. アクションの処理" を選択して、実行します。
Mapping オペレーション・メニューで"2."を選択する
次のような画面が表示されるので、キーボードの F6 キーを押します。(この画面で、F6 キーを使うガイドが出ていないのは、大変申し訳ありません。)
アクションの処理画面
上の画面のように、"アクションの管理" という小さな画面が "アクションの処理" 画面の上に表示されます。そこで、左の下線上にアクション名である "STD132PDF" を入力し、その右側の入力フィールドには、後でアクションの見分けがつくための説明を入力します。このフィールドは、残念ながら DBCS を受け付けないので、上の例のように半角英数文字を使います。
入力できたら、キーボードの "実行" キーを押して登録します。そうすると、元の "アクションの処理" 画面に戻ります。
アクションの処理画面に戻って "5" を指定した画面
アクション名を登録できたので、次はアクションの内容を定義します。上の画面のように "STD123PDF" の左横に "5"(コマンド行)を入力して、実行します。
ここで、"2" の "編集" を指定して実行すると、先ほど表示した小さな画面が表示され、アクション名とその概要を編集することができるようになります。

"5" を指定して実行した画面は、つぎのとおりです。
アクションのコマンドの初めの画面
ここでも、新規にコマンドを登録するには、キーボードの "F6" キーを押します。(ここでも、"F6" キーを使った新規作成のガイドが出ていません。)
次のような "コマンド作成" の画面が表示されますので、"MAPCPYSPLF" と入力してキーボードの "F4" キーを押します。
コマンド作成画面で "MAPCPYSPLF" を入力した

そうすると、おなじみの "MAPCPYSPLF" コマンドの指定画面が表示されます。ただし、入力する値の指定方法が異なります。
"ROBOT 変数" といって、次の変数を使うと、スプールのそれぞれの値を固定値ではなく ROBOT が実行する時点の値を引いてきます。
- &SPLF : スプール・ファイル名
- &SPLNUM : スプール・ファイル番号
- &JOB : ジョブ名
- &JOBNUM : ジョブ番号
- &USER : ユーザー名
- &LIBDES : 出力 OUTQ のあるライブラリー名
- &OUTDES : 出力 OUTQ 名
ここでは、スプール・ファイル名は固定の名前でも良いのですが、あえて ROBOT 変数を使ってみました。
スプール・ファイルの指定には ROBOT 変数が使用できますが、Mapping フォーマット名やシーケンス番号には使えませんので、それぞれ "STD" 、"00010" を指定します。指定した後、キーボードの "F10" キーを押した時の画面が、次のものです。指定した値にだけ ">" が付いています。
アクションに MAPCPYSPLF コマンドを登録する-1
改ページして表示した、次ページの画面では次の値を指定します。
- Mapdraw format language -> *XPS
- XPS Printer/outfile language -> '*PDF'
その結果が、次の画面です。
アクションに MAPCPYSPLF コマンドを登録する-2
さらにもう 1 回改ページして表示した次のページでは、生成する PDF ファイルのファイル名と保管フォルダー、そしてコード・ページを指定します。ここでも ROBOT 変数が使えますので、ファイル名の指定に使っています。
アクションに MAPCPYSPLF コマンドを登録する-3
これで実行キーを押すと、画面は次のように変わって、アクションのコマンドとして登録できたことが確認できます。
アクションにコマンドが登録できた
もし、次に別のコマンドを実行させたい場合(例:生成された PDF ファイルを OUTQ を通してプリンターに印刷させる。)は、ここで、キーボードの "F6" キーを押します。"00020" として次のコマンドを登録する画面が表示されますので、同じ手順で次のコマンドを登録します。
では、次回は ROBOT を使って、実際に PDF ファイルを生成してみましょう。