始めの言葉

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

2018年8月26日日曜日

MapDraw を使った帳票設計のテクニック 第9回 - 四則演算 - 4 -

各ページの小計の値を、複数ページに跨って合計することにより、総合計を計算して表示するための設計をお話ししようとしています。
そのために、今までの回で使用したスプール・データは適切ではなかったので、新たに別のスプール・データを用意しました。今まで何度か使用してきたベイトップ書房の見積書の明細ページを元に作りました。

先ず、MapF 上で、スプール・データをそのまま表示するための、1 つのグループとゾーンの組み合わせを作りました。
明細ページをそのまま表示した設計のプレビュー画面

本の単価と冊数の値を元に、本ごとの合計金額を計算します。そのために、グループ "g1" の中に次のゾーンを定義します。
- 冊数のメモリー・ゾーン "VOLM"
- 単価のメモリー・ゾーン "UNITPM"
- それぞれを掛ける数値計算ゾーン "PRICEM"
- 計算結果を表示するメモリー置換ゾーン "PRICE"
冊数のメモリー・ゾーン "VOLM"

単価のメモリー・ゾーン "UNITPM"
冊数と単価を掛け算する数値計算ゾーン "PRICEM"
計算結果を表示するメモリー置換ゾーン "PRICE"
このスプール・データは元々、1 行おきに空白行があることから、上のように定義しただけでは空白行に計算結果として "0" が表示されてしまいます。そのため、空白行では実行されないように "a" という名前を付けた条件を付けています。("条件" については、回を改めて詳しくお話しする予定です。)
 ところが、この状態でプレビューしてみると、次のようにおかしな結果が表示されています。1行目の計算結果がメモリー置換されていませんし、2 行目の計算結果は本来は 1 行目の計算結果である金額が表示されています。
そのままプレビューした画面
 この時の "サマリー" の中の条件 "a" に含まれるゾーンの上下関係を見ると、次のようになっています。これでは、最後に実行されるべきゾーン "PRICE" が 3 番目に実行されることになってしまいます。
サマリーの中の条件 "a" 内のゾーンの順番
そこで、メモリー置換ゾーン "PRICE" を最も下に移動します。
メモリー置換ゾーン "PRICE" を最も下に移動した結果
他のゾーンの実行順序も正しいことを確認して、サマリー表を保存します。この結果、プレビュー画面は次のようになり、正しくなったことが確認できました。
修正結果のプレビュー画面
なお、計算結果の金額に 3 桁区切りのカンマが表示されているのは、MapDraw上での計算結果に対して、プリファレンスの "桁区切り" 欄でカンマを指定していることが効いているためです。
MapDraw プリファレンスの桁区切りの指定

2018年8月19日日曜日

MapDraw を使った帳票設計のテクニック 第8回 - 四則演算 - 3 -

四則演算の設計のお話に戻ります。
MapDraw を使った帳票設計のテクニック 第6回 - 四則演算 - 2 - では、ページ単位の小計の計算を行いました。ただ、この設計だけでは不十分で、複数ページあるスプール・ファイルにおいて、ページ単位で小計を表示するには、ページ単位で計算結果をクリアするために、もう一つ数値計算ゾーンを作る必要があります。
7. 手順 "3" で定義した数値計算ゾーンと同じ名前の数値計算ゾーンを、グループの外に単独で作成します。
単独の数値計算ゾーンを作成
 8. このゾーンは、次のように定義します。
- タイプは、"メモリー"、"数値計算" とする。
- 桁は、"1"、長さは、"0" とする。
- ゾーンの後に追加する文字に、"0" (ゼロ)を記入する。
計算結果をページ毎にクリアするための数値計算ゾーンの定義
 次回は、全ページにまたがった総合計を表示する方法をお話しします。

2018年8月4日土曜日

MapDraw を使った帳票設計のテクニック 第7回 - 透かし文字 - 3 -

四則演算の機能を使って、スプール・データには含まれていなかった "小計" を表示するための方法を前回お話ししました。今回は、複数ページにある "小計" をページ毎に足していって、"総計" を計算して表示する方法をお話ししようと考えていましたが、"透かし文字" を表示する方法がまだ一つあることを思い出しましたので、今回はそれをお話ししたいと思います。
MapDraw を使った帳票設計のテクニック 第4回 - 透かし文字 - 2 - の回では、MapDraw の持つ "コンポーネント"という機能を使って、元々オーバーレイに相当する固定文字や罫線等をコンポーネントとして定義しました。それをプロジェクト・ファイルの中で、透かし文字にするゾーンの直後に実行する構成とすることによって、可変データを透かし文字にすることができました。
今回の方法は、透かし文字を持った XPS 形式のファイルを "レイアー" として用意しておいて、それを最も後ろ側に配置して PDF ファイルを生成するというものです。
この方法では、透かし文字は固定の文字となりますが、様々な種類の帳票に共通に適用して良いのであれば、XPS 形式のレイアーを一つ用意しておけば済むので、DrawF 側に透かし文字を定義するよりも、管理が大幅に楽になるというメリットがあります。

実際には、次のような手順で行います。
1. 先ず、実際に透かし文字の XPS ファイルを用意します。マイクロソフト社の Office 製品のどれでも良いのですが、ここでは自由度が高いパワーポイントを使用します。
次のように、ページ設定を "A4 縦"とした真っ白の画面に、グレーの大きなフォントで、"複製禁止" というテキスト・ボックスを追加します。ページの中央、対角線上に置きます。
パワーポイント上でテキスト・ボックスを追加
2. メニューの中の "ファイル" -> "印刷" を選択し、プリンターには "Microsoft XPS Document Writer" を指定してから "印刷" ボタンを押します。この "Microsoft XPS Document Writer" は、Windows7 移行の Windows には標準で付属しています。
Microsoft XPS Document Writerを指定して印刷
3. "印刷" ボタンを押すと、次のようなファイル名と保存場所を指定してファイルを保存するための画面が現れます。これは、通常のプリンター・ドライバーに対して "Microsoft XPS Document Writer" が異なる点です。この例では、IFS 上の mapping フォルダーの下に layer というフォルダーを新たに作って、"wm.xps" という名前の XPS ファイルを保存しています。IFS 上に保存することが重要なのは、言うまでもありません。
XPS ファイルのファイル名と保存場所を指定する画面
4. これでレイアーの準備ができましたので、PDF 生成のコマンドを実行します。Mapping V7 では次の画面のように、"MAPCPYSPLF" コマンドを使用します。
この 1 画面目から 3 画面目までのパラメーターの指定は、通常と変わりません。
MAPCPYSPLF コマンド 1 画面目
MAPCPYSPLF コマンド 2 画面目
MAPCPYSPLF コマンド 3 画面目
5. 4 画面目は今まで開いたことも無いかと思いますが、次のようにレイアーを指定することができるようになっています。ここに "3" で保存した "wm.xps" ファイルを指定します。
MAPCPYSPLF コマンド 4 画面目
6. 実行すると、次のように、表紙のページにも明細のページにも共通に "複製禁止" という透かし文字が適用されたことが分かります。
生成された PDF ファイルの表紙のページ
生成された PDF ファイルの明細のページ

2018年7月28日土曜日

MapDraw を使った帳票設計のテクニック 第6回 - 四則演算 - 2 -

今回は、実際に四則演算の機能を使って、明細のページ単位の小計の計算結果を追加表示してみましょう。
次のようにスプール・ファイル内にある 2 列の数値の内、左側の数値に対しては小計 (225,706) がありますが、右側の列の数値にはありません。そこで、この右側の列の合計を計算して表示するように設計します。
スプール・ファイル内の元の数値
プレビュー画面
1. 数値をそのまま表示するために、開始行を 8 行目、終了行を 22 行目としたグループ "g1" と、その中に通常のゾーンを MapF 画面に配置します。(上図参照)
2. 前回で四則演算の基本をお話したように、先ずは "Z12M" と名付けたメモリー・ゾーンをグループ "g1" の中に作って、金額を記憶させます。
メモリー・ゾーンの定義
3. 次は数値計算ゾーンです。メモリー・ゾーンで記憶した値を次々と足していく計算を、どのように指定したら良いでしょうか ? 数値計算ゾーンに対して "Z12T" と名付けるとして、次のように定義します。
- タイプは、"メモリー"、"数値計算" とする。
- 長さは、"0" とする。
- ゾーンの後に追加する文字に、"[[Z12T]]+[[Z12M]]"という計算式を記入する。(大括弧2つでゾーン名を囲むことが必要です。)
お分かりと思いますが、グループで指定した行の範囲に対して 1 行分ずつ値を次々と足していくという考え方です。
数値計算ゾーンの定義
4. 小計を表示させるために、開始行、終了行どちらも 1 行目とした固定グループを定義します。ここでは、"gt" と名付けます。
小計用の固定グループの定義
5. この固定グループ内に次のように定義したメモリー置換ゾーン "Z12ST" を定義します。
- タイプタイプは、"メモリー"、"メモリー置換" とする。
- 桁は、"1"、長さは、"0" とする。
- ゾーンの後に追加する文字に、数値計算ゾーン"[[Z12T]]"を記入する。(大括弧2つでゾーン名を囲むことが必要です。)
メモリー置換ゾーンの定義
 6. プレビューしてみると、次のように小計が計算された結果が表示されていることを確認できます。(確認し易いように、数値計算ゾーンでは、下線付きを指定しました。)
プレビュー画面

2018年7月22日日曜日

MapDraw を使った帳票設計のテクニック 第5回 - 四則演算 - 1 -

MapDraw を使うと、スプール・ファイルのデータを元に四則演算して、スプール・データに無い合計の値等を表示させるような設計ができます。
とは言え、実際に使用されている事例から判断すると、次のような 3 桁区切りのカンマを追加するという、比較的地味な使い方の方が一般的なようです。
3 桁区切りのカンマを始め、四則演算には "メモリー・ゾーン" を活用します。例えば、次の MapDraw のプレビューの画面でお分かりのように、スプール・ファイル内に 3 桁区切りになっていない数値データがあったとします。
3 桁区切りのカンマが無いスプール・データの例
MapDraw 上の四則演算の設計の基本は、次のとおりです。
1. メモリー・ゾーン(整数メモリー、または浮動小数点メモリー)を使って、演算する値を Mapping に記憶させます。
2. 数値計算ゾーンで定義した計算式を使って、記憶したメモリー・ゾーンの数値を計算します。
3. メモリー置換ゾーンを使って、演算結果を表示させます。

では、この "金額" 欄の数値を、3 桁区切りのカンマ付きの表示になるように設計してみましょう。
1. この例では、数値は繰り返し行の 111 桁から始まって、15 桁 ありますので、次の画面のようにグループ内のゾーンを定義するのですが、その際に、ゾーンのプロパティにおいて、タイプに "メモリー"、"整数メモリー"を指定します。
整数メモリーを指定したメモリー・ゾーンの定義
 2. 画面を閉じると、次のように、メモリー・ゾーンはピンク色になっていることが分かります。ちなみに、プレビューしても何も表示されません。なお、このゾーンには "a" と名付けた条件を定義しています。"条件" については、別の機会に詳しくお話します。
メモリー・ゾーンの表示
3. このメモリー・ゾーンをコピーして、数値計算ゾーンを定義します。数値計算ゾーンの定義に当たっては、次の点にご注意ください。
- "タイプ" は、"メモリー"、"数値計算" を指定する。
- "データの長さ" は、必ず "0" とする。
- "ゾーンの後に追加する文字"欄に、計算式を記入する。
- 計算式には、メモリー・ゾーンの名前を 2 つの大カッコで挟む。
ここでは、3 桁区切りのカンマを追加するために、メモリー・ゾーンの値を単に 1 で割るという計算式を使用します。
3 桁区切りのカンマを追加するための数値計算ゾーンの定義
 4. この数値計算ゾーンも、メモリー・ゾーンと同様に、画面にはピンク色で表示されますし、プレビューしても何も表示されません。
数値計算ゾーンの表示
 5. では、計算した結果を表示させるために、メモリー置換ゾーンを定義しましょう。数値計算ゾーンをコピーして、次のように編集します。
- "タイプ" は、"メモリー"、"メモリー置換" を指定する。
- "ゾーンの後に追加する文字"欄に、数値計算ゾーン名を、2 つの大カッコで囲んで記入する。
メモリー置換ゾーンの定義
6. このゾーンは通常のゾーンと同じ扱いができますので、表示するフォントの種類や大きさ、色、あるいは、配置の左寄せや右寄せを指定することができます。実際に、上の画面を閉じると、通常のゾーンと同様に背景は透明です。
メモリー置換ゾーンの表示
7. 実際にプレビューしてみると、次のように 3 桁区切りのカンマが追加されていることを確認できます。後は、このゾーンの値は数値なので、メモリー置換ゾーンのデータの配置を右寄せに変更します。
プレビュー画面
ところで、何故、1 で割っただけで 3 桁区切りのカンマが追加されたかという疑問を持つ方もいらっしゃると思います。これには、MapDraw プリファレンス画面にある "四則演算" 欄の "桁区切り" の定義が効いていることをご記憶ください。
MapDraw プリファレンスの桁区切りの定義




2018年7月15日日曜日

MapDraw を使った帳票設計のテクニック 第4回 - 透かし文字 - 2 -

DrawF 画面で設計する、オーバーレイよりも下に、データを使った透かし文字を表示するには、MapDraw の"コンポーネント"という機能を使います。大まかな考え方は、次の通りです。
1. DrawF 画面のみ、つまりオーバーレイだけを持つ、コンポーネントを作成し、生成します。
2. DrawF 画面の無い、MapF 画面のみのプロジェクト・ファイルを設計し、その MapF 画面に、透かし文字となる、文字の色をグレーに指定したゾーンを配置します。
3. その画面で、"1." で生成したコンポーネントを指定して、追加します。
4. "サマリー” 画面で、実行順序を次のように設定します。"2." で指定した透かし文字のゾーンが1番。"3." で追加したコンポーネントが2番です。
5. 後の手順は通常どおり、"4." のプロジェクトを生成します。

では、実際の画面で見ていきましょう。
1. MapDraw を起動して、"新規" を選択すると表示されるメニューの中に、"コンポーネント" がありますので、これを指定します。
新規 -> コンポーネントを選択
 2. コンポーネントではありますが、次のような "新規プロジェクト" という、いつもの画面が表示されます。ただし、プロジェクトの作成の場合と異なるのは、フォーマット名とシーケンスに既に値が入力済みで、変更できないことです。
新規プロジェクトの画面
3. "OK" ボタンを押すと表示されるのは、次のようにプロジェクトの作成の画面と変わらないようですが、MapF 画面に切り替えられない点が大きく異なります。
新規コンポーネントの作成画面
4. ここでは、作成済みのプロジェクト・ファイルのオーバーレイをコピーしてきました。DrawF 画面で、キーボードの "Ctrl" キーと、"A" キーを一緒に押すと、全ての要素を一括で指定できますので、それをコピー・ペーストすると簡単です。その後、MapDraw の図形タブ画面にある "コンポーネント" ボタンを押すと、次のような画面が現れます。オーバーレイのみなので、拡張子は "mpw" になります。任意の名前を付けて生成します。
コンポーネントの生成画面
5. 生成中には、プロジェクトの生成の時と同様に、次のような画面が現れます。フォントのチェックは、外しておきます。
コンポーネント生成の設定画面
6. 最後の、次のような生成レポートが表示されます。赤マークが無ければ完了です。
コンポーネントの生成レポート
7. 次に、オーバーレイの無いプロジェクトを用意し、そこに透かし文字用のゾーンを定義します。ここでは、作成済みのプロジェクト・ファイルに対して、オーバーレイを削除して、別のフォーマット名を付けます。
オーバーレイを削除し、フォーマット名を指定した画面
 8. ここでは、スプール・データの中の "見積り番号" を透かし文字とするために、"WM"という名前を付けたゾーンを定義します。ゾーンのプロパティ画面において、フォントのサイズを "48" ポイント、文字の色をグレー、角度を "45" 度に指定します。
文字のサイズを48ポイント、色をグレー、角度を45度に指定した "WM" ゾーン
9. "6" までの手順で作成したコンポーネントと組み合わせるために、"コンポーネントの表示" ボタンを押します。次のような画面が表示されますので、"追加" ボタンを押します。作成済みのコンポーネントを選択して、"開く" ボタンを押します。
コンポーネントを指定する画面
 10. 次のようにコンポーネント欄に指定したコンポーネントのファイル名が表示されますので、"OK" ボタンを押します。
指定したコンポーネントのファイル名が表示された画面
11. "プロパティ" タブ画面のメニューにある "サマリー" をクリックすると、次のような画面が表示されます。このプロジェクト・ファイルでは、"6" までの手順で作成したコンポーネントである "WM" ゾーンは、最後に追加したので、"グループ外のプロジェクト" の中の最下段にあります。そこで、▲マーク 2つのボタンを押して、"WM" ゾーンを最上段に移動させます。なお、"10." までの手順で追加したコンポーネントが、"WM" ゾーンの直下にあることを確認してください。この設定によって、1番目に "WM" ゾーンが実行され、その次にコンポーネントであるオーバーレイが実行されるようになります。つまり、"WM" ゾーンが表示する透かし文字が、オーバーレイの下に配置されることになることを表しています。
サマリー画面を使った実行順序の設定
12. 実際に、プレビューしてみると、次の画面のように、透かし文字がデータの文字はもちろん、オーバーレイである罫線の下に表示されていることが、分かります。
プレビュー画面
13. 後は、通常通り、プロジェクトの生成を行い、MapDraw フォーマットの取り込みを行います。MapDraw フォーマットの取り込み画面では、次のように、プロジェクト・ファイルの分と、コンポーネントの分の 2 つが表示されていますので、両方とも取り込むことを忘れないようにする必要があります。
MapDraw フォーマットの取り込み画面
14. "MAPCPYSPLF" コマンドを使って、次のように、スプール・データ内の見積り番号を透かし文字とする PDF ファイルができました。
スプール・データの見積り番号を透かし文字とした PDF ファイル