始めの言葉

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

2016年3月27日日曜日

連続用紙への印刷から、カット紙への印刷に移行する -第3回 キャラクター・モードを使った縮小印刷指定-

3. 印刷データの先頭に、縮小率や用紙方向、余白の値等を指定するコマンドを付加してプリンターに送信する方法があります。
この方法を使えば、ユーザーは、単に印刷指示するだけで、望みの設定で印刷結果を得られますから、ユーザーから見れば最も望ましい方式と言えます。
一方、システムの担当者から見れば、そのようなコマンドを付加して印刷データを生成するように、プログラムの修正が必要になりますので、その点では、最も手間の掛かる方式ということになります。
OS/400 の世界で標準の SCS というコマンド体系の中には、縮小等、これらのコマンドが元々ありません。SCS というコマンド体系ができた時には、そのような機能を持ったカット紙対応のレーザーが無かったことが原因と思われます。
そこで、プリンター側では持っている、PAGES モードの中にある縮小等のコマンドを、どうやって OS/400 上のプログラムから送信するかという課題を解決する必要が出てきます。
PAGES モードのプリンターで考え出された方法が、"キャラクター・モード"と呼ぶものです。
キャラクター・モードについては、バーコードの印刷方法 - 第2回 コマンドを使う、もう一別の方法 - の回で簡単にご紹介していますが、ここではもう少し詳しくお話します。
PAGES設定の中のキャラクター・モード設定

キャラクター・モードの基本的な考え方は、OS/400 上のプログラムの中では、あくまでも文字データとして扱われるが、それが、対応するプリンターに届くと、プリンターの中ではコマンドとして扱われるというものです。
それを実現するために
1. 先頭に"&$%$"という、通常のデータとしてはあり得ないような4文字を付ける。これを受信したデータは、キャラクター・モードが始まったと認識します。
2. 次に、後続のデータの内、何バイトの文字をコマンドとして扱うのかを知らせるための、バイト数を送ります。
3. その後ろに、実際に送りたい PAGES のコマンドを指定します。
という構造になっています。

キャラクター・モードの特徴と注意点は、次のとおりです。
1. 16進データではなく、文字データとして扱いますので、5250端末画面でスプールを表示した時に、指定したバイト数やコマンドが、そのまま文字として表示されますので、デバッグし易くなります。また、そのままプリンターに印刷させることによってもデバッグになります。
2. 文字データである限り、実際には文字として印刷されることはありませんが、ページの中の場所を取りますので、ページの中のどの場所に配置するかを考慮する必要があります。言い方を変えると、"Current Print Position"(現在の印字位置、ドット・プリンターでは印字ヘッドが印刷のために移動して、現在いる場所)は、キャラクター・モードのデータ分は移動しているということを忘れてはいけないということです。
3. キャラクター・モード開始を示す4文字には、"&$%$"の他に"$?!#"という組み合わせもあります。プリンターの初期設定のデフォルトは、"Off"になっていて、この設定をどちらかの組み合わせに変更することで、有効になります。どちらか一方しか指定できませんので、キャラクター・モードを使ってコマンドを送信するためにプログラムを編集する際には、初期設定と合わせた文字列に統一します。

では、A4用紙に横長で、縦横75%に縮小して印刷するためのコマンドをサンプルに、キャラクター・モードを使って、どのようにデータを送るかをご説明します。
1. 開始の文字列は、"&$%$"とします。
2. 送りたいコマンドは、次のコマンドでこの順番に並べることが重要です。
1B 7E 46 00 05 00 00 13 00 00       /* A4指定自動選択       */
1B 7E 51 00 01 01                       /* 縦・横75%     */
1B 7E 50 00 01 03                        /* 左下 270度回転 横長  */
3. 次にコマンドのバイト数を数えますが、2文字で1バイトになりますから、
10バイト(A4指定) + 6バイト(75%縮小) + 6バイト(横長) = 22バイト
22を16進数に変換すると、"x16" になりますから、キャラクター・モードで送る文字データとしては、全体で次のようになります。
&$%$00161B7E46000500001300001B7E510001011B7E50000103
この文字列を、印刷データの先頭に配置するように、プログラムを編集します。

2016年3月21日月曜日

連続用紙への印刷から、カット紙への印刷に移行する -第2回 単純な縮小印刷-

連続用紙に印刷していたデータを、カット紙にそのまま縮小印刷する方法は、3つ考えられます。それぞれ設定方法が異なり、それに応じて運用する場合の操作方法が異なってきますので、どの方法を採用するかは、準備の手間と、エンド・ユーザーの意見を併せて検討して、決める必要があります。ここでは、カット紙を印刷するプリンターは、InfoPrint1000J等の、PAGESモードのプリンターを前提とします。
また、AS/400 からは、PCOMMのプリンター・セッションを使用したPDT印刷か、HPT機能を使用した LAN 直結印刷を想定しています。(5400エミュレーターIIを使用した Telnet5250E 接続の場合には、今までお話したように、5400エミュレーターIIで縮小設定を行うのが良いと思います。)
PAGES印刷条件の例

1. プリンターの初期設定で縮小印刷を指定する方法
これは、プリンターの"PAGES印刷条件"という初期設定メニューの中で、
- 用紙方向 : 縦/横
- 縮小率 : 連続用紙(15"x11")->A4/B4、縦横同じ比率で50%まで1%刻み
- 余白 : 長さを上下左右独立して指定
- 両面印刷 : する/しない、する場合には長辺綴じか短辺綴じの指定
といった各項目を、用紙トレイ毎に設定しておく方式です。
一度、操作パネル上で設定しておくだけで済みますので準備は簡単ですが、用紙トレイ毎にこれらの設定の組み合わせが異なる場合は、印刷する際に、別の方法で用紙トレイを指定しないとなりません。用紙トレイを指定するには、次にお話しする"2."や"3."の方法を採らざるを得ませんので、それであれば、縮小の指定も一緒に行う方が良いということになります。
そのように考えていくと、この方法は、用紙トレイの少ない場合にのみ有効な方法と言えると思いま
す。
もし、"2."や"3."の方法と併用したとしても、操作パネルでの初期設定は、プリンターの内部処理の優先順位が最も低くなっていますので、"2."や"3."の設定が有効となります。

2. PDT ファイルや、リモートOUTQの設定の中に縮小設定のコマンドを埋め込む方法
縮小設定や、余白の設定のための PAGES コマンドを、プリンター・セッション経由の場合は
プリンター・セッション経由の印刷 第2回 - PDFファイルの編集 -
の回でお話した方法で、HPT機能を使った LAN 直結印刷の場合には、
HPT機能を使った印刷 - WSCSTについて-
の回でお話した方法で埋め込むことで、指定することができます。
この場合、複数の設定の組み合わせ(縮小の比率や余白の値)があっても、1つ1つの設定の組み合わせに対応した OUTQ が作られることになりますので、ユーザーは、印刷先の OUTQ を切り替えることで、縮小の設定を切り替えて印刷するという運用を実現できます。
コマンドを埋め込む際の注意点は、
- 縮小率を指定するコマンドは、必ず、用紙トレイ指定のコマンドの後ろで指定すること
- バーコード・コマンドを使ったバーコード印刷のあるデータを縮小する際には、必ず、縦横同じ比率の縮小率を指定すること(連続用紙->A4/B4という縮小率の指定は、縦横の縮小率が異なるため、バーコードの位置や大きさが正しく印刷されません。)
この方法であれば、同じプリンターに対しても、ユーザーが印刷先に指定する OUTQ さえ正しく指定していれば、様々な種類の設定を切り替えて印刷させることができるというメリットがあります。

ユーザーによる OUTQ の切り替えも難しいような場合には、次の"キャラクター・モード"を使って、印刷データにコマンドを埋め込むという方法が有効になりますが、その説明は長くなりますので、次回に譲ります。
 

2016年3月13日日曜日

連続用紙への印刷から、カット紙への印刷に移行する -第1回 基本の考え方-

ライン・プリンターやドット・プリンターを使って行なっている連続用紙への印刷を、レーザー・プリンターを使った、A4サイズ等のカット紙への印刷に移行するケースは多くあります。数回に分けて、その考え方や注意点、具体的な方法についてお話ししたいと思います。
カット紙へ移行しようと考える時の動機としては、次のようなメリットが考えられます。
1. ライン・プリンターやドット・プリンターの廃止による維持費の削減
2. 印字品質の向上
3. 印刷速度の向上
これらの内、最も多いのが、コスト削減を目指した"1."になります。特に、既にレーザー・プリンターや複合機を使用している場合には、それらに AS/400 からの印刷も集約することで、設置場所や運用コストの効率化が期待できます。

ただし、その際には、次の点も併せて考慮する必要があります。
1. コスト削減の効果を出すためには、アプリケーションの変更を伴わず、若しくは最小限で実現できること
2. 印刷結果が、それを使用するユーザーからも受け入れられるものであること

連続用紙は、用紙の左右に並んだ送り穴を、プリンターのトラクターのピンが一つ一つずつ引っ掛けて用紙を送りますので、印字位置の精度は非常に高くなっています。そのため、事前印刷された金額欄の罫線に、3桁ずつぴったりと数字を印刷するといった使い方ができます。
その一方、レーザー・プリンターや複合機では、カット紙はゴム・ローラーを使って、摩擦で送られています。そのため、用紙の表面状態が温度や湿度の影響を受けることや、ゴム・ローラー自体の経年変化によって、印字位置の精度については、プラス/マイナス2mm程度は仕様として許容範囲となっています。その結果、カット紙に対して事前印刷して使用するケースは、非常に稀です。
連続用紙の印刷をカット紙化するイメージ

そこで、先ずは、最もカット紙化し易い、事前印刷の無い連続用紙への印刷を、カット紙に移行するケースを対象にお話します。
初めに、前提条件を設けて、コスト・メリットを試算してみます。

<現行の印刷の前提条件>
- 現行のプリンター : 5400-L06 ライン・プリンター
- 印刷枚数 : 4,000枚/月(5400-L06 の想定月間印刷枚数の1/3)
<現行の年間のコスト(用紙代を除く)>
- プリンターの保守契約料金 : 223,200 円/年
- インク・リボン代 : 1.1 円/枚
223,200 + 1.1 x 4,000 x 12 = 276,000 円/年

<移行後の印刷の前提条件>
- カット紙に移行後のプリンター : InfoPrint1756J(印刷速度 : 35ページ/分)
<移行後の年間のコスト(用紙代を除く)>
- プリンターの保守契約料金 :19,440 円/年(サービス・パック5年の価格から算出)
- 消耗品代 : 4.5 円/枚
19,440 + 4.5 x 4,000 x 12 = 235,440 円/年

月間印刷枚数が4,000枚の場合は、移行すると、年間約40,000円 のコスト削減になることが分かります。
計算式を比較すると、1枚当たりの消耗品代は高くなりますが、年間保守契約料金が大幅に下がることでメリットが出ていることが分かると思います。

では、どのようにしたら、移行できるかを次回以降でお話します。

2016年3月5日土曜日

LAN 直結で双方向通信する印刷方式"Telnet5250E" - 第5回 -

ライン・プリンターに始まって、ドット・プリンターに広がった"Telnet5250E"ですが、次にはレーザー・プリンターにも対応して欲しいというご要望が出てきました。レーザー・プリンターの場合、次のような印刷の制御にも対応しないとなりません。
- 給紙トレイ(用紙サイズ)の指定
- 用紙方向(縦長/横長)の指定
- 縮小率の指定
- 印刷開始位置(上と左の余白)指定
PAGES モードを持ったレーザー・プリンターの場合は、1つの給紙トレイに対して、これらの値をセットで操作パネル上で初期設定しておけば、印刷の度に給紙トレイを選択することで、希望通りの印刷はできます。
しかし、AS/400 からの印刷では、毎回手動で設定を変更するという方法は現実的ではなく、例えば、"プリンター・セッション経由の印刷 第2回 - PDFファイルの編集 -"の回でお話したように、これらの値のセットに対応した"OUTQ"を選択するという方式の方が望まれます。
そのために、レーザー・プリンターにも対応した"5400エミュレーターII"では、初めに2つのデバイスが登録できるようになりました。
つまり、5400エミュレーターIIが持っている設定用の"Webページ"上で、給紙トレイや用紙方向などの上記の値をプル・ダウン・メニューやラジオ・ボタンを使って指定し、1つの"デバイス"として登録させると、その設定に応じて印刷できる OUTQ が、OS/400 上に自動構成されるという仕組みです。この"デバイス"というセットが、初めは2つでしたがその後3つまで登録できるようになりました。
これは、1台の5400エミュレーターIIにおいて、3つまでの"Telnet5250E"のセッションをOS/400 との間で張っているということを意味しています。
デバイス設定の画面
プリンター・セッション経由の印刷や、HPT機能を使った印刷では、PAGESのコマンドを理解して、ユーザーが自分でPDFやWSCSTを編集する必要がありましたが、5400エミュレーターIIでは、Webページ上で簡単に設定できますので、PAGESのコマンドを理解する必要はありません。5400エミュレーターIIの中で、設定に応じたPAGESコマンドを印刷データに付加してプリンターに送信している訳です。
ただ、少し難しいのは、余白の値の設定方法です。元の PAGES コマンドでは、1/1440インチ単位の値を16進数で指定することになっていますので、この画面でもその値を入力する必要があります。例えば、10mmに設定したい場合には、次のような計算になります。
10 / 25.4 = 0.3937 インチ -> 0.3937 x 1440 = 567 (567/1440インチ) -> 567を16進数に変換 -> 237
10ではなく、237をセットすることで、余白の値は10mmになります。

5400エミュレーターIIがレーザー・プリンター向けに発行するコマンドは、PAGES になりますので、対応するレーザー・プリンターは、PAGES モードを持ち、なおかつパラレル・インターフェイスを持ったモデルになります。InfoPrint1000J シリーズの初代のモデルである InfoPrint13xx シリーズでは良かったのですが、次の世代の InfoPrint17xx シリーズになると、パラレル・インターフェイスの形状がハーフ・ピッチ36ピンと呼ばれる小型のものになりました。その結果、5400エミュレーターIIを取り付けるには、プリンターに付属のハーフ・ピッチ/フル・ピッチ変換アダプターを介することになるのですが、そうすると、5400エミュレーターII自体の重みによって少し垂れ下がったような状態となり、接触不良を起こす場合が出てきたのは、残念なことでした。また、その後は、パラレル・インターフェイス自体が時代遅れとなったのか、PAGES モードを持った高速モデル SP8200 ではパラレル・インターフェイスが無いため、5400エミュレーターIIは使用できないことになったのも、時代の流れとは言え、寂しいものでした。