始めの言葉

「プリンターから印刷できて当たり前」と、ユーザーからも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 ファイルの明細のページ