始めの言葉

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

2015年12月10日木曜日

バーコードの印刷方法 - 第4回 もっと柔軟な方法 - Mapping Suite の場合-2

ページによってバーコードの種類や位置が変わる帳票を設計するには、2種類のアプローチが考えられます。
"MapDraw"では、前回お話したように、スプール・データの中の、行番号と桁幅を指定してバーコード表示することができますから、ページ毎にバーコード表示するデータの位置が異なっていても、それらを全て1ページに含むような設計をしておけば、バーコード表示するデータが存在した箇所のみ、バーコードは表示されます。また、同じ場所にあるデータを、あるページでは文字として印刷し、他のページではバーコード表示するといった場合には、それらを切り替える条件を定義できれば、1つの設計で対応できることになります。

そのような技が通用しない場合には、別のアプローチとして、バーコードの種類や配置の組み合わせに応じた帳票設計を、その組み合わせの数だけ用意しておいて、それらを1本のスプールに対して切り替えながら適用するという方法が考えられます。
これは、1本のスプールの中で、1ページ目が表紙、2ページ目以降が明細のページというような、請求書などに多い、複数のフォーマットを必要とする帳票の場合と同じ考え方です。

MapDraw 表紙ページのプレビュー画面
MapDraw 明細ページのプレビュー画面
左の上のサンプル・イメージは、Bayトップ書房という架空の書店の見積り書の、1ページ目の表紙を、帳票設計ツールの"MapDraw"で設計した後、プレビュー表示した画面です。画面の左半分がプレビュー画面、右半分が1ページ目のスプール・データを表示しています。
("MapDraw"では、プレビュー表示した際、右側の画面のスプール・データは、帳票に表示されたデータのみ緑色に変わります。これによって、データの抜けが無いかを確認できます。)

左の下のものは、2ページ目以降の明細ページをプレビュー表示した画面です。表紙と全く異なる設計になっていることが、お分かりいただけるかと思います。

では、この2種類の帳票設計を1つのスプールに対して、1ページ目と2ページ目以降で、どのようにして切り替えて適用するのでしょうか ?

話は先に飛びますが、"Mapping Suite"が、OS/400上でPDFを生成するコマンドは、"MAPSPLPDF"なのですが、これの主なパラメーターには次のものがあります。
1. 対象となるスプール・ファイルを特定するためのファイル名、ファイル番号、ジョブ名、ジョブ番号、ユーザー
2. 適用する帳票設計の名称(フォーマット名)とシーケンス番号
3. PDF化する対象のスプール・ファイルの中の開始ページと終了ページ
4. PDFファイル名、生成先のフォルダー
5. コード・ページ

この中で、表紙ページと明細ページの切り替えのために重要なのが、"フォーマット名"と"シーケンス番号"です。"フォーマット名"は、Bayトップ書房の見積書として、1つです。シーケンス番号には、表紙ページ用に"00010"、明細ページ用に"00020"を割り振り、"MAPSPLPDF"を実行する際には"*MRG"を指定することで、スプール・ファイルの各ページに対して、その条件に応じた設計(ここでは、表紙用の"00010"と明細用の"00020")を自動的に切り替えて適用します。

表紙ページの"プロジェクトのプロパティ"画面
ここで出てきた"フォーマット名"は、"MapDraw"で設計する際に"プロジェクトのプロパティ"画面で指定します。左の画面イメージは、"表紙ページ"の"プロジェクトのプロパティ"画面で、ここでは"BAYTOP"となっています。
このフォーマット名は、"明細ページ"の設計にも使用します。

"シーケンス番号"も、同じ"プロジェクトのプロパティ"画面で指定します。左の"表紙ページ"の"プロジェクトのプロパティ"画面では、"00010"となっています。"明細ページ"では、この値を"00020"とします。

表紙ページの"条件設定"画面
もう1点、重要なのは、表紙ページと明細ページの切り替えの条件付けです。表紙ページと明細ページのスプール・データの違いに着目して、切り替え条件を設定します。
このBayトップ書房の見積書の場合は、見積り番号の位置が、表紙ページでは、5行目の106桁目から114桁目にありますが、明細ページでは、4行目の106桁目から114桁目にあることから、左の画面イメージにあるように、表紙の"プロジェクトのプロパティ"画面で指定しています。(明細ページでは、行の値が 4になっているわけです。)
この切り替え条件で正しく切り替わるかを確認するには、"MapDraw"のプレビュー機能の一つである"マルチ・プレビュー"を使用します。"マルチ・プレビュー"では、"MapDraw"画面で、スプール・データのページ番号を次々と変えていった時に、設定された条件に応じた設計の帳票として表示されます。このページの上の"表紙"と"明細"の2つの画面が、それらです。


2015年12月6日日曜日

バーコードの印刷方法 - 第3回 もっと柔軟な方法 - Mapping Suite の場合-1

前回までのバーコードの印刷は、プリンターの制御コマンドをプリンターに送信して、プリンター内部でバーコード・イメージを生成して印刷する方法でした。そのため、バー幅の指定が細かくできるといったメリットがある一方、どうしても使用可能なプリンターのモデルやメーカーの制限が出てきます。今回は、そのような制限の無い、もっと柔軟な印刷方法をお話します。併せて、mayayam様からいただいたコメント"1ページ目と2ページ目以降で異なるバーコード指定が可能なソリューション"もご紹介したいと思います。

1. APWの使用を前提にすると、"CHGMRG"データを使用すると、スプールのページ単位で異なるフォームを適用する、つまり、位置や種類の異なるバーコードを指定することは可能です。"CHGMRG"データの使用方法に関しては、次の資料(APWのマニュアル)の14ページ目以降にで公開されています。
http://www.ricoh.co.jp/pps/download/pdf/apw_print.pdf
ただ、これは、APWを使用する以上、使用可能なプリンターの制約はありますし、コーディングも大変だと思います。

2. 一般的な Windows Office アプリを使用するとしては、MS Access 上で予めバーコード指定のある帳票設計を行っておき、そこへ、MS Access の機能を使って、AS/400 上の DB から抽出したデータをはめ込んで、Windows プリンターに印刷するという方法が考えられます。この方法では、プリンターから見ると、文字や数字だけでなく、バーコードも全てイメージ・データとして送られてくることになります。従って、読み取り精度を向上させるには、バーコード全体の大きさを調整することになると思います。

3. "帳票ソリューション"を使用する方法は、費用は掛かるものの、既存のアプリケーション・プログラムを変更せずに、柔軟な条件でバーコードを付加した帳票を作成することができるものです。
様々な種類の"帳票ソリューション"が販売されていますが、価格の違い以外に、大きくは次の 2 種類に分けられます。
- OS/400 上で印刷データ(PDF ファイルを含む)を生成するタイプ
- AS/400からスプールを Windows サーバーに受信して、Windows サーバー上で印刷データ(PDF ファイルを含む)を生成するタイプ
それぞれには得失があります。
前者は、Windows サーバーを立てて保守・運用していく必要が無いという大きなメリットがあります。また、運用への組み込みには、ユーザーが馴染んだ RPG や CL のスキルを活用することができます。
後者は、AS/400 側の CPU への負荷が最小限で済むというメリットがあります。
どちらのタイプを選択するかは、価格面も考慮に入れて総合的に判断する必要があるかと思います。
ここからは、筆者が技術サポートを担当している、前者のタイプのソリューション"Mapping Suite"上で、バーコードをどのように指定し、印刷するかをお話します。

"Mapping Suite"では、帳票設計は、"MapDraw"というツールを使って、Windows PC 上で行ないます。
"MapDraw"は、下の画面のように、左右で分かれています。
MapDraw画面(左側オーバーレイ設計画面・右側スプール表示画面)
左側の画面で、オーバーレイ(固定文字や固定罫線)の設計を行ないます。
右側の画面は、対象となるスプール・データを表示し、それを参照しながら、左側の画面で、オーバーレイ上へのデータの配置を指定していきます。







バーコードを指定するには、下の画面にあるように、バーコードに変換するデータのフィールド(右側の画面で背景が青色になっている箇所)を、左側の設計画面に配置し、そのゾーン(と呼びます)のプロパティ(属性)でバーコードとして表示することを指定します。
ゾーンのプロパティ画面(CODE39を指定)
左の画面では、プロパティとして、
- 5 行目の、106 桁目から長さ 9桁を
- バーコード CODE39
で表示することを表わしています。

なお、"Mapping Suite"では、1次元バーコードは専用フォントを使って生成しますので、プロパティの中の"フォントとスタイル"画面で、フォントに"BC39L"を指定します。バーコードの大きさは、このフォントのサイズと、高さ(50% - 200%間)で指定します。
フォントとスタイル画面(フォントにBC39Lを指定)
1次元バーコードで使用する専用フォントは、"MapDraw"と一緒に Windows 用の TrueType フォントとしてご提供しています。

ちなみに、2次元コードである"QRコード"は、上の"データ位置"の画面で、バーコードの種類を"QRコード"を選択した上で、"詳細"ボタンをクリックすると、"バーコードの幅"で大きさと、他に"エラー・レベル"を指定します。


プレビュー表示すると、設定したバーコードがどのように表示されるかを画面上で確認できます。
プレビュー表示(青矢印がCODE39)

では、1ページ目と2ページ目以降で異なる種類のバーコードを異なる場所に表示するには、どのように設計すかを次回、お話します。





2015年11月22日日曜日

バーコードの印刷方法 - 第2回 コマンドを使う、もう一別の方法 -

前回お話した"APW"のバーコード・パラメーターを使う方法は、対応できるプリンターの種類や接続方法の条件がありました。また、毎ページ同じ場所のデータを、毎ページ同じ場所に印刷するには良いのですが、それらがページ毎に変化する場合には、対応できません。
そこで、プログラミングが必要となる、手間の掛かる方法ですが、それらの制限を緩和できる方法を、今回はお話します。

1. "5400プリンター拡張コマンド(テキスト・コマンド)"を使用する
このコマンドの仕様は、下記のサイトで公開されています。
http://www.ricoh.co.jp/pps/download/manual/lineimpact/pages_command.html
考え方としては、通常のデータでは無いような3文字("!#%"か"!@&")の後に、「バーコード印刷」「バーコード設定」のコマンドを「文字データ」として、印刷データの中に組み込むと、プリンターがそれらを、文字ではなくコマンドと解釈してバーコードのイメージを生成して印刷するというものです。
インパクト・プリンターでのバーコード印刷サンプル
特徴は、次のとおりです。
- コマンドの構造が簡単であること
- コマンドを文字として入力しますので、スプールを表示した時に、そのまま文字として表示されることにより、後で確認し易いこと
- バーコードの他に、文字拡大、OCR-B フォント指定も指定できること

一方、注意点は
- 使用可能なプリンターは、5400 シリーズのライン・プリンター(モデル006、S06を除く)と、5400エミュレーターIIを使ってTelnet5250E接続した 5577 系とPAGES対応のプリンターになること

- 5400 プリンターや 5400 エミュレーターII の初期設定で、先頭の3文字を設定すること
- コマンドを記述した場所の影響で2行に跨ってしまうと、コマンドの中に「CR+LF」(復帰+改行)が含まれてしまうことになりますので、避けた方が良いこと(次の2つの方法にも共通)
- コマンドと言っても、印刷されない文字データという扱いですから、1ページの中の印刷する文字の無いところに配置すること(次の2つの方法にも共通)
- 特にバーコードを印刷するためのコマンドは、その後、改行することで実行されますから、最後に必ずLF(改行)を送信すること(次の2つの方法にも共通)

です。

2. "//LA// コマンド"を使用する
5557シリーズと、5577-H05/G05 プリンター単体の場合は、5557拡張制御コマンド"//n// コマンド"を使用できます。
バーコード用のコマンドは、下記のサイトで公開されています。
http://www.ricoh.co.jp/pps/download/pdf/5577g05h05_command_enlargement.pdf
http://www.ricoh.co.jp/pps/download/pdf/5577g05h05_command_notes.pdf
コマンドの考え方や使い方は、「1」のコマンドのものとさほど変わりません。
注意点も
- 使用可能なプリンターは、5557 シリーズと、5577 シリーズでも"H05""G05"モデルののドット・プリンターになること
- プリンターの初期設定で「プリンター・タイプ」を「5557モード」に変更すること
- コマンドの中に、何バイトのコマンドかを示す「カウント」を指定しますが、コマンド全体が2行に跨ることは避けること
です。

3. "キャラクター・モード"を使用する
"キャラクター・モード"は、IBM ブランド時代から、ドット・プリンターでも、PAGES モードのレーザー・プリンターでもサポートしてきた機能なので、上記の2つの方法よりも使用可能なプリンターの種類は多くなります。プリンターが解釈できるコマンドを、文字データとしてプリンターに送信するという基本的な考え方は同じで、異なる点は
- 先頭に付加する文字列は、”&$%$"か、"$?!#"の4文字であること
- プリンターが、コマンドやデータとして解釈する部分はその後に続く何バイトかを、4文字の後に2バイトの16進数で追加します。(2文字が1バイトです。この4文字は数に含めません。)
対応機種や実際のコーディングのサンプルは、下記のサイトで公開されています。
http://www.ricoh.co.jp/pps/support/techinfo/character_mode_jp.html
注意点は
- プリンターの初期設定で、先頭の4文字を設定する必要があること
- ライン・プリンターの5400シリーズでは、"5577モード"で使用する場合であっても、キャラクター・モードはサポートしていないこと
(従って、QRコード用のコマンドは、"5577モード"で持っていますが、下で述べる"透過モード"を使わないと、AS/400 からは送信できないということになります。)
他は、上の2つの方法と同様です。


以上の3つの方法は、文字データとして、PC 用のプリンターのコマンドをAS/400から送信し、プリンターの機能としてコマンドとして解釈し、処理する方法です。
そのため、プリンターのモデルによる制約がありますが、もう一つ別の方法として、16進コードで、PC 用のプリンターのコマンドを送信する"透過モード"という方法があります。
こちらの方が、PCOMM のプリンター・セッションの機能として、印刷データの中に16進コードで含まれたプリンター用のコマンドを、プリンターに対してコマンドとして送信する方式なので、プリンターのモデルやメーカーの制約は少なくなります。
しかし、16進で記述することになりますので、文字データして記述するよりも、ハードルは高くなると思います。
この方法に関しても、下記のサイトで詳しい情報を公開しています。
http://www.ricoh.co.jp/pps/support/techinfo/transparent_mode_jp.html

考え方は、キャラクター・モードと似たところがあって、先頭に"03"、そして送信するコマンドのバイト数を付加して、AS/400から送信すると、プリンター・セッションでは、"03"を外し、バイト数の値で指定された長さのコマンドをプリンターに送信するというものです。
従って、あくまでもプリンター・セッション経由、PDT印刷が前提となります。

どの方法にしても、プログラミングのスキルが必要になりますし、実際に印刷しながらの調整は必要になりますので、もっと効率の良い簡単な方法はないのか ? という疑問も出てきます。
そこで、次回は画面上でバーコードを大きさや場所を簡単に指定できるソリューションをご紹介します。



2015年10月25日日曜日

バーコードの印刷方法 - 第1回 コマンドを使う -

前回、"バーコード"という言葉が出てきたので、今回は今までの話の流れから少し逸れますが、バーコードのお話をします。
"このプリンターでバーコードを印刷できますか?"というお問い合わせを、何度もいただくことがあります。AS/400から、プリンターにバーコードを印刷させるには、いくつもの方法があります。

1. プリンターが持っているバーコード印刷コマンドを送信する方法
これは、プリンターから見れば、バーコードを印刷するコマンドが送られてきて、それに従ってプリンターの内部でバーコードのイメージ(パターン)を作って印刷する方法です。
この方法には以下のメリットがあります。

1-1. 各バーの幅を、コマンドのパラメーターとして、個別に指定できることにより、読み取り率を向上させ易い点です。
特に、インク・リボンを使って印刷するインパクト方式のプリンターでは、細白バーは、実際に印刷される左右両側の黒バーに挟まれた、印刷されない線として表現されますので、1ドット幅にしか指定しないと、左右からのインクの滲みよって、1ドット幅以下の幅になってしまいます。そのため、バーコード・リーダーが読み取る時に、細白バーとして認識でき難くなるわけです。細白バーの幅を先ず2ドット以上と指定し、他のバーの幅をそれを元に決めていくことをお勧めしています。
1次元バーコードのパターン

1-2. 後で述べるユーザー定義文字や、シンボルの組み合わせと比べて、バー幅の修正が圧倒的に楽な点です。
これももちろん、読み 取り率向上につながりますが、コマンドのパラメーターとしてバー幅を指定することは、その値を変更するだけで、バーコードの読み取り率を向上させることが できます。ユーザー定義文字や、シンボルといった、バーコードのパターンを自分で設計する方式では、印刷結果の読み取りテストを行いながら、該当する全部のパターンを修正することになりますので、膨大な手間が掛かることになります。



1-3. OS/400上でバーコードを指定するツール(APW)が用意されている点です。
APW (Advanced Printer Writer) (正式には多機能漢字印刷ユーティリティー)は、世界標準のSCSコマンドに対して、日本独自に追加されたバーコード・コマンドを使い易く するために、日本独自で開発されたツールです。使用可能なバーコード・パラメーターの仕様は、次のサイトで公開されているマニュアルで確認できます。
http://www.ricoh.co.jp/pps/download/manual/other/apw_v3.html

1-4. ネットワークへの負荷が少なく、処理時間の短縮が期待できる点です。
印刷データの量としては、コマンドだけになりますので、ネットワーク上の負荷はその分、少なくなります。バーコードのイメージ(パターン)を生成するの は、プリンターの中のマイクロコードの処理になりますが、経験的には、その処理時間が全体の処理時間に影響することは無いと思います。
黒細バーのインクが滲んだ様子

以上のメリットに対して、次の点には注意が必要です。
- APWを使用する場合、次のバーコードは指定できません。
GS1-128(EAN128.コンビニ収納代行用のバーコード)と、QRコード(これは、正確にはバーコードではなく2次元コードになります。)。そのため、5577系のドット・プリンターや、5400ライン・プリンターはQRコードを印刷するコマンドを持っていますが、そのコマンドを送信するプログラムを作る必要があり、これがなかなか大変です。
- APWを使用する場合は、プリンターのモデルと接続方式が、限られています。
接続方式は、AS/400と直結するTwinax接続やLAN直結する"Telnet5250E"接続か、ホスト印刷変換機能を使用したLAN直結接続です。
前者のプリンターとしては、5400シリーズと、モデル名の最後2桁が"05"となっている5577シリーズ、若しくは5400エミュレーターを使って"Telnet5250E"接続した5577シリーズや、PAGESモードを持ったレーザー・プリンターになります。後者のプリンターは、PAGESモードを持ったレーザー・プリンターです。
- APWを使用する場合は、バーコードを印刷する場所は、毎ページ同じになります。

以上の制約を受けないために、APWは使用せずに、コマンドをプログラムの中に組み込む方法も採れますが、5577モードのバーコード・コマンドは16進コードでプログラムすることとなり、これもなかなか手が掛かります。そこで、コマンドを他のデータと同じ文字データ(テキスト・データ)として組み込む方法がありますので、それは次回お話します。

2015年9月22日火曜日

HPT機能を使った印刷 - コマンド変換機能の制約 -

PCOMM の PDT印刷では、PDT ファイルの定義に従って PCOMM のプリンター・セッションが、AS/400 から受信した印刷データの中の制御コードを、5577 形式や PAGES 形式に変換してプリンターに送信します。HPT 機能を使った LAN 直結印刷の場合も同様のコマンド変換を、OS/400 が行ないます。そのプログラムのソース・コードは共通という話を以前に聞いたこともあります。
ただ、実際には、両者の間には次のような違いがあります。

1. HPT 機能では、"AFP"プリンター用のデータを PAGES 形式に変換して、PAGES プリンターに印刷できますが、PCOMM 経由の印刷では対応していません。
"AFP"プリンターに関しては、AS/400 ユーザーのお客様では使用実績が多くないため、このブログでは触れませんので、ここで簡単にご紹介します。
InfoPrint4100


InfoPrint SP8200
"AFP(Advanced Function Presentation)"プリンターには、連続用紙対応の大型高速レーザー・プリンターや、カット紙対応の高速レーザー・プリンターがあります。高速印刷であることは、大量印刷を意味し、大量印刷であることは、ページ抜けや、重複ページの印刷の防止といった"印刷管理"機能を必要とす
ることを意味します。また、Windowsアプリケーションからの印刷のように自由な、文字の種類や大きさ、配置の印刷を、AS/400 から直接行なえるメリットがあります。
しかし、AS/400 にも対応する様々な"帳票ソリューション"(我がMapping Suiteもそうですが)が提供され、プリンターの状況監視も、TCP/IP の世界では"SNMP"プロトコルとそれに対応したツールが実現する今となっては、"AFP"の優位性も少なくなってしまったと言えるかもしれません。
リモートOUTQ の設定で、"メーカー・タイプ及び型式"に"*IBMPAGES300"を指定することで、印刷データが"AFP"プリンター用の場合は、OS/400 が、PAGES コマンドの中のイメージ送りコマンドに変換します。つまり、"AFP" のデータをイメージに変換して印刷する訳です。
この場合、LPR 印刷になりますから、本来の"AFP" プリンターで行なえたプリンターとの双方向通信による印刷管理はできません。プリンターの状態に関わりなく、印刷データを送信したら終了です。
2. "APW"やプリンター・ファイルで指定した次のパラメーターは、5577 形式や PAGES 形式への変換に制約があります。("APW"については、今後、機会を改めてご紹介します。)
  • "APW"のバーコード・パラメーター:PCOMM プリンター・セッションでは変換できません。HPT 機能を使った印刷では、"MRGAPW" の際の"DEVTYPE"に"*SCS"を指定し、HPT では "PAGES" モードへの変換を指定した場合のみ、変換されます。
  • 角丸付き罫線:PCOMM プリンター・セッション経由の場合は、"MRGAPW" の際の"DEVTYPE"に"*PAGES"を指定した場合のみ、HPT では "PAGES" モードへの変換を指定した場合のみ、変換されます。("DEVTYPE"は"*SCS"でも"*PAGES"でも共通)
  • 網掛け:PCOMM プリンター・セッション経由の場合は、"MRGAPW" の際の"DEVTYPE"に"*PAGES"を指定した場合のみ、HPT では "PAGES" モードへの変換を指定した場合のみ、変換されます。("DEVTYPE"は"*SCS"でも"*PAGES"でも共通)
  • 文字拡大(2 x 4 と 4 x 2): "DEVTYPE"で"*PAGES"を指定し、PCOMM プリンター・セッション経由の場合のみ変換されます。
  • 文字拡大(3 x 3):"DEVTYPE"で"*SCS"を指定し、HPT で "PAGES" モードへの変換を指定した場合のみ、変換されます。
  • 文字拡大(4 x 4):"DEVTYPE"で"*SCS"か"*PAGES"を指定し、HPT で "PAGES" モードへの変換を指定した場合のみ、変換されます。
上記以外の"APW"のパラメーターで通常使用されるものは、プリンター・セッション経由の印刷でも、HPT 機能を使った印刷でも変換されますので、コマンド変換で最も注意する必要のあるのは、バーコード・パラメーターになるのではないでしょうか ? 

2015年9月9日水曜日

HPT機能を使った印刷 - 簡単な双方向通信可能なOUTQを作る方式 -

前々回でお話ししたリモート OUTQ を作る方式は、単なる LPR 印刷なので、プリンターに対して印刷データを送信するだけの方式です。そのため、プリンターの電源が入っていなかったり、用紙切れが発生していても、それをエラーとして検知することはできません。今回、お話しする装置記述を作る方式では、TCP/IP の世界で定義された SNMP(Simple Netwrok Management Protocol)を使って、簡単なエラー状態を OS/400  が把握することができます。
注意 : 装置記述の作成は特殊権限が必要なので、ユーザーIDは、QSECOFR で行なってください。

1. 先ず、次の手順で装置記述を作ります。5250 端末画面で、"CRTDEVPRT"というコマンドを入力して F4 キーを押します。この画面で使用しているパラメーターは、次のようになります。
CRTDEVPRTを実行した画面-1
  • 装置記述 : 任意ですが、この名前はそのまま OUTQ の名前になります。(なお、ライブラリーは自動的に"QUSRSYS"になります。)
  • 装置クラス : "*LAN"が指定です。
  • 装置タイプ : "3812"が指定です。(余談ですが、3812 は1980年代中期に発表された英数データ用のページ・プリンターです。A4とレター・サイズの用紙に対応し、PCには"Proprinter"モードで接続し、他にホスト・システムにも接続可能なモデルでした。)
  • 装置形式 : "1"が指定です。

2. 実行キーを押して表示される画面で、"LAN接続機構"に"*IP"を指定してから実行キーを押すと、次の画面になります。パラメーターは次のように指定します。
CRTDEVPRTを実行した画面-2
  • ポート番号 : "9100"が指定です。
  • フォント 識別コード : "11"が指定です。
  • 用紙送り : 通常のカット紙用のレーザー・プリンターの場合は、"*AUTOCUT"が指定です。(連続用紙の場合は、"*CONT"になります。)
その下の"印刷装置エラー・メッセージ"が、デフォルトの"*INQ"の場合は、OS/400 にエラー・メッセージが通知され、メッセージ応答が求められます。"*INFO"に変更した場合は、エラー・メッセージが通知されるだけです。



3. パラメーターを入力したら、次ページの画面を表示します。"非活動タイマー"に"*SEC15"を指定してから実行キーを押すと、次の画面になります。
CRTDEVPRTを実行した画面-3
ここで重要なのが、"ホスト印刷の変換"です。"*YES"にすることで、OS/400 が印刷データを、その下の"メーカー・タイプ, 型式"で指定する形式の印刷データに変換して、接続先のプリンターに送信します。
"メーカー・タイプ, 型式"で F4 キーを押すと、前々回お話した、リモートOUTQ を作成する時と同じ選択肢が表示されます。
http://as400printhelp.blogspot.jp/2015/08/hpt-outq.html
ここでは、PAGES プリンター用として"*IBMPAGES300"を指定します。
なお、その下の"用紙入れ1、2"は給紙トレイ、"エンベロープ・ソース"は封筒用のトレイを意味しますが、まだ試してみたことがありません。

4. 次ページの画面ではパラメーターを次のように指定します。
CRTDEVPRTを実行した画面-4
  • リモート・ロケーション : プリンターのIPアドレスか、ホスト名を指定します。
  • システム・ドライバー・プログラム : これは"*IBMSNMPDRV"が指定です。この指定によって、OS/400 は、プリンターが"SNMP"の規格に従って把握している状態を知り、エラーの場合はエラー・メッセージを通知することになります。







5. 実行キーを押して装置記述が生成できたら、後は、"STRPRTWTR"コマンドを実行して OUTQ を使用可能な状態にします。

では、この OUTQ を使って印刷した場合、実際にエラーはどのように通知されるでしょうか ?
1. OUTQ "SP8200"のプリンターが、電源 OFF の場合
メッセージ : CPA3387 : (C R) 装置 SP8200 が使用できない
プリンターが電源OFFの場合

この後、プリンターの電源を入れて、"R"で応答すると、印刷可能になります。









2. OUTQ "SP8200"のプリンターが、用紙切れの場合
メッセージ : CPA405C : (C R) 装置 IP8200 の入力トレイに問題がある
プリンターが用紙切れの場合

この後、用紙を補給して、"R"で応答すると、印刷を再開します。
再開する開始ページを指定することはできませんが、プリンターの電源を切らない限り、プリンター内部のメモリーに保管されて印刷処理を待っているページから印刷再開しますので、問題は無いはずです。






3. OUTQ "SP8200"のプリンターが、用紙ジャムの場合
メッセージ : CPA404D : (C R) 装置 IP8200で用紙ジャムが起こった

この後、ジャムした用紙を取り除いてプリンターを印刷可能状態に戻して、"R"で応答すると、印刷を再開します。印刷開始ページを指定することはできませんが、プリンターの電源を切らない限り、プリンター内部のメモリーに保管されて印刷処理を待っているページから印刷再開しますので、問題は無いはずです。

2015年9月1日火曜日

HPT機能を使った印刷 - WSCSTについて-

"WSCST"(ワークステーション・カスタマズ・オブジェクト)とは、随分と長い名前ですが、OS/400 が印刷データを変換する時に参照するテーブル(対照表)のようなもので、ちょうど、プリンター・セッション経由(PDT 印刷)における PDF ファイルに相当するものです。PAGES モードのプリンター用のサンプルが、下記のサイトに、詳しい情報と共に掲載されていますので、ご参照ください。
http://www.ricoh.co.jp/pps/support/techinfo/dwgwscst_jp.html
PDF ファイルのように、使い方に合わせて編集するソース・ファイル
http://www.ricoh.co.jp/pps/download/txt/pages1_300.txt
の中をご覧いただくと、次のような箇所があります。
:INITPRT
      DATA ='1B7E010000'X                   /*初期化設定*/
            '1B7E0300013C'X                 /*行ピッチ設定6LPI */
            '1B7E02000132'X                 /*文字ピッチ設定10CPI */
            '1B7E5A000403AE0000'X.          /*コードページ変更942 */

この":INITPRT"で始まるこのブロックが、PDF ファイルの中の "START_JOB=" に該当します。
つまり、このサンプルでは、OS/400が変換した印刷データの先頭に、「初期化」「行ピッチ設定」「文字ピッチ設定」「「コードページ変更」コマンドを追加する指定となっています。
その他は、例えば
:ADDDRWTBL.
       :ADDDRWTBLE
           NUMBER = 3
           DATA = '1B7E4600050000030000'X.  /*用紙トレイ選択 第3*/
といったように、PRTF の中のドロワー(給紙トレイ)指定の各値を、PAGES モードのコマンドにどのように置き換えるかの指定だったり、
:ADDDRWTBLE
           NUMBER = 123                     /* B4縮小 縦*/
           DATA = '1B7E4600050000120000'X   /*用紙トレイ選択B4 */
                  '1B7E51000102'X           /*ページ様式設定 連→B4 */
                  '1B7E50000100'X           /*メディア座標原点 左上*/
                  '1B7E53000A00000000000000000000'X. /*論理原点 0, 0 */
といったように、ドロワーの値に"123"を指定すると、連続用紙サイズから B4 サイズに縮小し縦長に印刷する独自の設定を追加することができます。
もちろん、PRTF のパラメーターを活用できるようにまで WSCST を編集しなくても、":INITPRT" の中に指定のコマンドを追加するだけでも十分使用可能ですが、編集したテキスト形式のファイルをOS/400に送信して、CRTWSCST コマンドを使ってオブジェクトに変換しないとならない点が、PDF ファイルを PDT ファイルにコンパイルするよりも面倒かもしれません。
もっと簡単に使用するには、プリンターの初期設定(IP1000J PAGES モデルでは「PAGES 印刷条件」メニュー)で、縮小率や用紙方向を指定する方法でも良いわけです。

注意) IP1000J プリンター PAGES モデルでは、上記の":INITPRT" の指定では不十分で、実際に印刷させると、RPCS モードでのデータ・エラーが発生するという問題が発生しました。これは、プリンターが、PAGES モードに変換された印刷データを受信したにも関わらず、ドライバー印刷用の RPCS モードのデータと勘違いしてエラーになったのが、直接の原因です。そこで、印刷データの先頭にプリンターを PAGES モードに切り替えるコマンドを追加することで、この問題は回避できました。具体的には
:INITPRT
      DATA='1B7E12000111'X /* PAGES 選択     */
を追加しました。これはちょうど、PAGES 用の PDF ファイルの中の "START_JOB="の先頭にも
CDS EQU 1B 7E 12 00 01 11                       /* PAGES 選択     */
で定義された "CDS" があることと同じ原理です。

2015年8月26日水曜日

HPT機能を使った印刷 - リモートOUTQの作成 -

今回は、先ず、LPR 印刷に相当するリモートOUTQからの印刷のために、リモートOUTQを実際に画面を追いながら作っていきます。サンプルとして、OS/400 V7R1 上で、PAGES モードのレーザー・プリンターへの直接印刷用のリモートOUTQ を作ります。
CRTOUTQ初めの画面
リモート・システムと待ち行列の指定
  1. 5250 端末画面で、"CRTOUTQ"というコマンドを実行します。左の画面は"QUSRSYS"というライブラリーに、"IP1000J"というリモートOUTQを作成する場合のサンプル画面です。それらの指定は任意ですが、"リモート・システム"には、必ず"*INTNETADR"を入力して実行キーを押します。(F4 キーを押すと、"*INTNETADR"以外にも選択肢が表示されます。)
  2. そうすると、"リモート印刷装置待ち行列"欄以下が表示されますので、そこに、宛先プリンターのLANカード固有の値を入力します。画面の"lp"(半角小文字)は、通常、多くのレーザー・プリンターや複合機用に使用できるようです。(Windowsの場合の、Standard TCP/IPポートのパラメーターである「キュー名」が、これに該当します。)
  3. 次のページでは、"接続タイプ"には、必ず"*IP"を、"宛先タイプ"には、必ず"*OTHER"を指定します。"ホスト印刷の変換"はデフォルトの"*YES"になっていると思いますので、カーソルをここへ移動して実行キーを押すと、追加のパラメーターが表示されます。
  4. *IBMPAGES300を指定
  5. ここで、次に表示される"メーカー・タイプ及び型式"で、印刷データをどのプリンターのモードに変換するかを指定します。プリンター・セッション経由の印刷では、PDT の選択に該当するわけです。F4 キーを押すと実に多くの選択肢が表示されますが、ここでは、PAGES モードのプリンター用として、2番目の画面に出てくる"*IBMPAGES300"を選択します。
<参考情報>
  •  同じ画面に"*IBM5575"があります。5577 モードに変換するには、これを選択します。("*IBM5575AMOV"は、テストしたことがありません。)
  • PAGES と名前が付いた選択肢が他にもありますが、今までの実績では"*IBMPAGES300"がお勧めです。
  • 他に日本語の印刷に対応した選択肢としては、"*CANLIPS3"があり、これは CANON 社のレーザー・プリンター用ですが、これもテストはしたことがありません。
CANON LIP3用の指定
  • もう一つは、"*ESCPDBCS"です。これは、ESC/P モードのインパクト・プリンター用ですが、これもテストはしたことがありません。
  • インパクト・プリンター用としては、他に、NEC 社プリンター用として"*NECPCPR201"がありますが、今後の修正は無いことが IBM 社のサイトに記載されています。
  • ESC/P用の指定
  • PCL モードのレーザー・プリンター用として、"*HP"で始まる名前のものが多数あります。このモードで日本語を印刷するには、プリンターには日本語用の内蔵フォントがありませんので、OS/400 からフォント・イメージを持った印刷データを送信する必要があります。(HP 社のレーザー・プリンターは日本語内蔵フォントを持っているようですが。) しかし、OS/400 自身もそのままでは日本語フォントのイメージを持っていませんので、AFP プリンター用のフォント・ライセンスを購入(導入)していただき、そのフォントを使用するように指定する必要が出てきます。

2015年8月14日金曜日

HPT機能を使った印刷 - LAN直結印刷の基本 -

5577 や PAGES モードを持った PC 用のプリンターに印刷させる方法には、前回までお話したプリンター・セッション経由の印刷の他に、OS/400 の HPT(Host Print Transform, ホスト印刷変換)機能を使った方法があります。これは、プリンター・セッションで行なう文字コード変換(5577 系の場合は、EBCDIC -> S-JIS)と、制御コード変換(5577 系の場合は、SCS -> 5577形式)を、OS/400自体が行なうものです。そのため、かつてOS/400のバージョンが、V3R7 や V4 の頃には、HPT機能を使用して印刷させようとすると、他の業務系のアプリケーションの実行速度に影響が出るため、実使用に耐えないといったケースもありました。しかし今では、AS/400 自体の処理能力が大幅に向上した結果、最早そのような事例を聞くこともありません。そうなると、プリンター・セッション経由の印刷と比較して、PC の電源が入っていないと印刷できないといった制約が無い点で、この印刷方法を採用されるユーザーも多いようです。ここで、先ず HPT機能を使った印刷の特徴や注意点を整理すると次のようになります。
  • リモートOUTQを使う方式と、デバイス・タイプに"3812"を指定して装置記述を作り、そのOUTQを使う方式の2種類があります。
  • プリンター・セッション経由の印刷と違って、どちらの方式でも自動構成ではありませんから、リモートOUTQや装置記述は手動で作る必要がありますし、ライターも初めは手動で起動する必要があります。
  • 前者の方式の原理は"LPR印刷"になりますので、エラーも含めたプリンターの状態は、OS/400 側に送信されず、単にスプールを印刷データに変換して、プリンターに送信するだけになります。
  • その際、設定によっては印刷部数の指定は可能ですが、ページ範囲の指定はできません。(IBM のサイトにあるツールを導入すると可能になるようですが、IBM による保証が無いことと、ツール自体が古いものなので、OS/400 の最近のバージョンでも使用可能かは、私もテストしたことが無い点にご注意ください。)
  • 後者の方式では、現在の多くのプリンターの LAN カードが持っている SNMP(Simple Network Management Protocol) というプロトコルを使って、OS/400 はプリンターの状態を把握します。その結果、プリンターの電源Off、用紙切れ、用紙ジャムといったエラー状態が OS/400 上にメッセージとして表示されます。ただし、"メッセージ応答"としての、ページ範囲を指定した再印刷はできません。これは、スプールがプリンターの制御コマンドを使った印刷データに変換されると、OS/400 はページの境目を認識できなくなるからです。つまり、ページ範囲を指定した再印刷が可能なのは、SCS形式のスプール・データを(変換せずに)直結されたプリンターで印刷する場合だけということを意味しています。
  • スプール・データの中の文字に外字があった場合、プリンター・セッション経由の印刷では、その PC に保管されている Windows外字のイメージをプリンターに送信して印刷します。しかし、HPT 機能を使った印刷では、OS/400 上の外字イメージを使用します。"OS/400 上の外字イメージ"とは、OS/400上で稼働する"CGU(Character Generation Utility)"という外字作成ツールを使って、外字用の文字コードに対して登録する、24x24ドットと、32x32ドットのドット・パターンです。24x24ドットのパターンは、5577 系のプリンターに印刷する場合、32x32ドットのパターンは PAGES モードのプリンターに印刷する場合に使用します。外字を使用するお客様の場合は、必ず24x24ドットのパターンは作成しますが、32x32ドットのパターンまでは作成していない場合がほとんどです。32x32ドット・パターンは、初めから作ることももちろんできますが、24x24ドット・パターンを元に変換するメニューが、"CGU"に用意されていますので、これを使っていったん作成し、その後、ドットの構成を修正して、より品質の良い外字のドット・パターンにすることができます。
次回以降で、OUTQを設定する具体的な方法をご説明していきます。

2015年8月10日月曜日

プリンター・セッション経由の印刷 第5回 - PDT印刷の考え方 -

PAGESモードのプリンターを例に、PDT 印刷のお話をしてきましたが、PDT 印刷そのものに対する考え方をここで整理しておきたいと思います。
  1. PDFファイルの中の"START_JOB="の後ろに並べたコマンドが、AS/400からプリンター・セッションに送られてくる印刷データの先頭に付加されるとお話しました。それは、印刷結果の全体に対する制御しかできないということを意味しています。つまり、用紙トレイの指定とか、縮小率の設定とか、両面印刷か片面印刷かという制御は可能ですが、ある特定のデータをバーコードにして印刷するとか、ある特定の文字のみを横倍角で印刷するといった制御はできないということです。
  2. 同様に、プリンターの制御コード(コマンド)の使い方を正しく知った上で、それを 3 文字の英数字に置き換えて、"START_JOB="の後ろに並べる必要があるということです。例に使用した PAGES コマンドの場合、サンプルの PDFファイルでは、"START_JOB=" の後ろのコマンドの並び方は、"START_JOB=CDS INZ SEL SA4 FA4 SRO"となっています。細かく見ると、
    • 初めに"CDS"によって、プリンターを"PAGES"モードに設定する。
    • その後、"SA4"によってA4トレイを指定してから、"FA4"によって縮小率を指定し、"SRO"によって用紙方向を指定しています。これらの指定はこの順序で指定しないと、有効になりません。それはプリンターの内部制御との関係でそうなっているのですが、実際に試してみないと、なかなか分かり辛いところだと思います。
  3. "PAGES"は、IBM 時代に 5577 モードのコマンドとの互換性を考慮して、レーザー・プリンター独自の機能(トレイ指定、縮小等)をコマンドとして追加したものの総称ですが、レーザー・プリンターのメーカーには、PAGES 同様に 5577 モードのコマンドに各社独自の規格でレーザー・プリンターのコマンドを追加し、「5577エミュレーション」として販売している会社が多くあります。これらのレーザー・プリンターに対して PDT印刷を行なうには、PDT印刷の原理から考えると、次のようになるかと思います。
    • 基本となるPDFファイルには、「ibm5577.pdf」を使用する。
    • それに対して、そのプリンターの 5577 モードからの拡張コマンド(トレイ指定、縮小等)を BEGIN_MACROS の下で、3文字の英数文字に置き換え、それを"START_JOB="の後ろに追加する。
    • その際に、コマンドを並べる順番に注意が必要。
    • メーカーの拡張コマンドの仕様書を入手する。
  4.  別の機会にもう少し詳しくお話しますが、プリンター・メーカー間である程度共通の"PJL"コマンドがあります。PDT 印刷において、"PAGES"プリンターの場合、PAGES のコマンドでは持っていない機能を"PJL"コマンドを使った指定で補完することができます。次のサイトで公開されているマニュアルの26ページから説明されています。これも基本的な考え方は共通で、「PJL コマンドを正しく知る」ことと「英数 3 文字に PJL コマンドを置き換えて"START_JOB="の後ろに並べる。ただし、PJL コマンドは終了を明示する必要があるので、"END_JOB="の後ろにも、PJL コマンド終了を追加することが必須です。このマニュアルの例では、印刷された用紙にパンチ穴を開ける場合や、ステープル止めを行なうための記述が書かれています。パンチ穴を開ける場合は、用紙の長辺にするか短辺にするか、ステープル止めも、用紙の角にするか、長辺や短辺に2箇所止めるかといった指定も併せて行ないます。 http://www.ricoh.co.jp/pps/download/pdf/pagescard_g1797838_100506a.pdf
<余談>1980年代後半には、私はプリンターの開発部隊で、製品企画に携わっていました。この頃は、小型のデスクトップ型レーザー・プリンターが発売され始めた頃で、PS/55 用にもレーザー・プリンターが求められていました。当時のアプリケーションは、DOS や OS/2 上で稼働するもので、印刷のためには、プリンターの持っているコマンドをアプリケーション自身が直接生成して、プリンターに送信する方式しかありませんでした。一方、レーザー・プリンターを発売するメーカーはどこも、自社独自の制御コマンドを作って、それをアプリケーション・メーカーにサポートしていただき、その数を増やすことで、自社コマンド規格を業界標準に位置付けることを狙っていました。IBM 社内でも、自社OSやソフトである"J-DOS"や"OS/2"、"DOS文書(ワープロ)"や"MultiPlan(表計算)"、OS/2 用の"Smartシリーズ"は当然のこと、他社ソフトも含めた多くのアプリケーション・ソフトに PAGES をサポートしていただくことが、レーザー・プリンターの製品発表の条件とされ、企画担当者である私は、大分苦労した記憶があります。
しかし、そのような方式ではアプリケーション・メーカーの負担ばかりが大きく、その後、Windows が現れたことによって、アプリケーション・ソフトはWindowsにだけ対応すれば良くなりました。そして、今度はプリンター・メーカー側に、Windowsのバージョン・アップに対応して、自社規格のコマンドを使ったドライバーの開発を続けていかなくてはならないという負担が移った訳です。なお、ちなみに海外では、初めに小型レーザー・プリンターを発売した HP 社のコマンド"PCL(Printer Control Language)"が、見事に業界標準の位置を占めることに成功したため、日本のプリンター・メーカーも海外製品では、"PCL"を標準でサポートしています。

2015年7月28日火曜日

プリンター・セッション経由の印刷 第4回 - 追加の設定 -

前回の続きですが、印刷の度に、START_JOB= 以下に記述したコマンドを印刷データの先頭に送信するようにするには、プリンター・セッションのワークステーション・プロファイルの編集が必要です。具体的には次の手順になります。
ワークステーション・プロファイルをメモ帳で開く
  1. コンパイルして作成されたPDTファイルを指定したプリンター・セッションを、独自の名前を付けて保管します。保管されるファイルが、ワークステーション・プロファイルと呼ばれるもので、拡張子は、".ws"です。私のPC上のCA V6.0では、C:\Users\ログイン・ユーザー名\AppData\Roaming\IBM\Client Access\Emulator\private に保管されています。
  2. プリンター・セッションは一旦閉じてください。
  3. このファイルをメモ帳等のテキスト・エディターで開きます。開くと表示のような画面が現れますので、その中に[printers]と書かれた行を見つけます。
  4. その下の行に Use_Default=Y という1行を追加します。
  5. そのファイルを上書き保存して、プリンター・セッションを起動してください。
この1行を追加することによって、プリンター・セッションからの印刷データの先頭には、毎回、自分で設定したコマンドが追加されて、プリンターに送信されます。

他に注意が必要なケースは、1ページの行数が66行を越えるデータの場合です。PDFファイルに戻りますが、メモ帳で開くと、/* Session Parameters */の直下に"MAXIMUM_PAGE_LENGTH=066"という行があります。この行の値が、デフォルトの"66"のままの場合、1ページの中のデータの行数が67以上あると、66行目までしか印刷されません。もし 1 ページに 66 行以上の行数がある場合には、この値を大きくしてください。なお、改ページする行数は、あくまでもプリンター・ファイルで定義されているのであって、ここの値ではありませんから、1ページの行数を越える大き目の値にしておけば良いわけです。

また、今までのトラブル対応の経験の中で判明した、追加設定には次のものがあります。これらは当時のPCOMMやCAのバージョンにおいて有効だったものですが、その後のバージョンでも通用するかどうかは、確認していません。
  • 透過(ASCII Transparent)モードを使用する場合
いずれもう少し詳しくご紹介しますが、5577 モードや PAGES モードの PC プリンターに印刷する場合に、AS/400上のスプール・データの中に、5577 モードや PAGES モードのコマンドを16進コードで埋め込むことができます。これを「透過モード」と言いますが、プリンター・セッション経由で印刷する場合には、次の設定が必要です。
- プリンター・セッションのワークステーション・プロファイルの中の[printer]の下に、 ATRN=Y を1行追加して、プリンター・セッションを再起動します。
  • 新JISフォントを内蔵していない古いモデルのプリンターで、新JIS並びの文字で印刷する
2015年4月13日の投稿で申し上げたように、新JISと旧JISで文字コードが入れ替わった文字の組み合わせが29組あります。
http://as400printhelp.blogspot.jp/2015/04/jisjis.html
現在使用されているプリンターで、新JISに対応していないような古いものは無いと思いますが、もし、そのようなプリンターでも新JIS並びに合わせた文字で印刷するには、次の設定を行います。
- プリンター・セッションのワークステーション・プロファイルの中の[printer]の下に、 OldJIS=Y を1行追加して、プリンター・セッションを再起動します。

2015年7月21日火曜日

プリンター・セッション経由の印刷 第3回 - PDFファイルのコンパイル -

PDFファイルの編集が完了したら、既存の PDF ファイルとは別名で、同じ"Pdfpdf"というフォルダーの下に保存します。次はこれを PDT ファイルにコンパイルすることで、初めて PDT 印刷に使用できるようになります。手順は次のとおりです。
"PDT の選択"ボタン
1. プリンター・セッションの画面でプリンター設定画面を開きます。

2. "PDT ファイルの使用"欄にチェックを入れて、"PDT の選択"ボタンを押します。









"PDF の変換"ボタン

3. "PDT ファイルの選択"画面が表示されるので、"PDF の変換"ボタンを押します。









PDF から PDT への変換

4. "PDF ファイルから PDT ファイルへの変換"画面が表示されるので、"Pdfpdt"フォルダーに保管した PDF ファイル(ここではpages.pdf)を指定して、"変換"ボタンを押します。





正しく変換された場合


5. "PDF ファイル変換ユーティリティー"の画面上で、"テーブルは正しくコンパイルされました"というメッセージが表示されたら、"OK"ボタンを押します。も し、エラーが発生したら、編集した PDF ファイルを開いて、中のコマンドや記述のしかた(1バイトずつスペースを挟んで記述されているか等)をチェックしてください。
生成された PDF の選択



6. "PDT ファイルの選択"画面が自動的に表示されるので、コンパイルされた PDT ファイル(ここでは pages.pdt、PDF ファイルと同じファイル名で、拡張子が pdt になります。)を指定して"OK"ボタンを押します。

編集した PDF ファイルをコンパイルして PDT ファイルを作成し、PDT 印刷用に指定するのはここまでですが、実際にはこれだけでは不十分なケースが多くあります。ほとんどのレーザー・プリンターでは、AS/400 からの印刷だけではなく、Windows のアプリケーションからのドライバー印刷にも自動切換えで使用されます。また、AS/400 からの印刷でも、全てが同じ余白の設定や縮小率の設定では対応しきれないので、何種類かの設定に対応するための PDT ファイルを用意して、それら PDT ファイルに1対1で対応するプリンター・セッションを切り替えて印刷するケースも多くあります。
ところが、PDT 印刷の標準では、PDF ファイルの中で指定した、印刷データの先頭に付加するコマンド
START_JOB=CDS INZ SEL SA4 FA4 SRO P10 LL6
は、1回しか印刷データに付加されません。そのため、例えば、pages.pdt を使ったPDT 印刷の後、Windows ドライバー印刷を行って、プリンターが Windows ドライバー用のモードに変わってしまうと、次の AS/400 からの印刷では、プリンターは Windows ドライバー用のモード のままで切り替わらない可能性が出てきます。また、同じ AS/400 からの印刷でも他の設定で印刷すると、その設定のままの状態となっています。
そこで、印刷データの先頭に付加したコマンドを、毎回、プリンターに送信する必要が出てきます。


2015年7月15日水曜日

プリンター・セッション経由の印刷 第2回 - PDFファイルの編集 -

前回お話したPDTファイルは、プリンター・セッションのプログラムが使用するものなので、中身は読めませんが、元になるPDFファイルは、ユーザーが自分の使用目的に合わせて編集できるようになっています。インパクト・プリンターを使用している場合には、通常はそのままの状態で使用しますが、独自に編集する必要があるのは、次のような場合が考えられます。
  1. 1ページの行数が66行よりも多いデータを印刷する。
  2. 前トラクターと後ろトラクターにそれぞれ2種類の連続用紙をセットして、それを操作パネルのスイッチを使って手動で切り替える代わりに、OUTQを選択することで自動的に切り替える。
これらに対応するための方法は、基本的にレーザー・プリンター向けの編集方法と考え方は同じですから、この後はレーザー・プリンターを使用する際の編集方法に話を進めます。
レーザー・プリンターは、ページ・プリンターという呼び方もあるように、ページ単位で印刷処理します。つまり、プリンター内で1ページ分の印刷データが準備できてから印刷動作を開始します。その結果、インパクト・プリンターではできない
  • 縮小印刷
  • 用紙方向の縦長・横長指定
という機能がありますし、更にカット紙用のレーザー・プリンターでは
  • 用紙トレイ選択・排紙トレイ選択
  • 両面印刷(長辺綴じ・短辺綴じ指定)
  • 上下左右の余白設定
といった機能を持っていて、これらを組み合わせた設定をPDTファイルに組み込むことで、自動的に希望の印刷結果が得られるようになります。
では、早速、PAGESモードのプリンター用のPDFファイルを使ってご説明します。PAGESモード用のPDFファイルは、PCOMMやCA標準の ibm5585.pdf を元に作られたものが、下記のサイトで公開されています。
http://www.ricoh.co.jp/pps/download/utility/pdt_pdf.html
このファイルを PC にダウンロードして、メモ帳等のエディターで開きます。(ダブル・クリックするとAdobe Reader が起動してエラーが表示されますので、ご注意ください。)
上から順番に見ていくと、すぐに"BEGIN_MACROS"があります。
(/*と*/で挟まれた部分は、コメント・アウト、つまり説明用のテキストで、機能には関係しません。)
初めの"NUL EQU 00"は、このPDFファイルの中では、"NUL"という3文字は、16進コードのコマンド"00"を表わしているという定義になります。つまり、任意の英数3文字 EQU(Equal イコール)16進コードのコマンドという書き方で、コマンドを英数3文字に置き換えているわけです。更に先を見ると、PAGES独自のコマンドの例として、用紙方向横長指定として、SRO EQU 1B 7E 50 00 01 03 と書かれた行があります。これは、SRO は、16進コードのコマンド 1B 7E 50 00 01 03 を置き換えるという意味になります。
AS/400から送られる印刷データの先頭に、これらのコマンドを追加するための指定は、"BEGIN_MACROS"の先にある
/*                     Control Codes                                  */
の直下の START_JOB= の行で行います。デフォルトで記述されている
START_JOB=CDS INZ SEL P10 LL6
は、
CDS(Change Data Stream)プリンターをPAGESモードにセットする -> INZ(Initialize)初期化する -> SEL(Select)印刷可能状態にする -> P10 文字ピッチを10cpiにする ->LL6 行ピッチを6lpiにする
という順番でプリンターにコマンドを送ることを意味しています。そこで、この行を、その下にコメント・アウトされているサンプル
START_JOB=CDS INZ SEL SA4 FA4 SRO P10 LL6
に置き換えると、プリンターをPAGESモードに設定し(CDS)、A4用紙のトレイから給紙して(SA4)、連続帳票からA4への縮小(FA4)して、印刷する設定になります。
なお、細かい話ですが、PAGESの場合、トレイ指定コマンド(ここではSA4)と、縮小コマンド(ここではFA4)は、この順番で記述しないと指定が有効になりませんので、ご注意ください。
また、余白の設定を併せて行うとすると、少し難しくなります。MACROの中に「余白ヘッダー部」として"MRG"があります。これを使うのですが、これはヘッダー部だけ、つまり何ミリにするかという値が含まれていませんので、START_JOB=の後ろに組み込む時に MRG の後ろに値を追加する必要があります。
余白の値は、値(ミリ)をインチに換算した値 x 1440を16進数にした値を、1バイトずつスペースで区切って記述します。例えば、用紙方向横長で、上余白10mm、左余白15mmに設定するには
  1. 上余白の値の計算 10mm÷25.4mm/インチx1440 = 567 -> 16進に換算= 0237 
  2. 左余白の値の計算 15mm÷25.4mm/インチx1440 = 850 -> 16進に換算= 0352
  3. 用紙方向横長のMACROは SRO
  4. MRGの後ろに左余白、上余白の順で1バイトずつブランクを挟んで記述します。
START_JOB=CDS INZ SEL P10 LL6 FB4 SB4 SRO MRG 00 00 03 52 00 00 02 37 00 00
 

このコマンドで設定した余白の値は、プリンターの操作パネルから初期設定で指定した
余白の値の影響は受けません。

余白の値の定義

2015年7月8日水曜日

プリンター・セッション経由の印刷 第1回 - PDT印刷とは -

前回までのお話で、ポートの設定もできたので、次はいよいよ、プリンター・セッションのお話にしたいと思います。PCOMMやクライアント・アクセス(以降CA)、あるいはIBM製以外のエミュレーターでも考え方は同じで、プリンター・セッション経由の印刷には、
  • プリンター・セッションが印刷データを生成する方式
  • 一般的な Windows のアプリケーションと同様に、プリンター・セッションが、Windowsとデータのやり取りをして、プリンター・ドライバーが印刷データを生成する方式
の2種類の方法があります。前者はPCOMMやCAでは、「PDT印刷」と呼ばれています。PDT とは、Printer Definition Table の略で、5577 用の場合には、AS/400から送信されてくる文字コードをEBCDIC から Shift-JIS へ、制御コマンドは SCS形式から 5577形式へ変換するための参照テーブル(表)を意味しています。つまり、この表を参照しながら、プリンター・セッションがAS/400からの印刷データを 5577系のプリンターで印刷可能なデータ形式に変換する訳です。
PCOMMやCAには標準で用意されている PDT には、日本語対応のものは
  • 5577
  • ESC/P
  • PAGES
  • LIPS III
英語対応のものは
  • PPDS(IBMプロプリンター)
  • PCL
  • Basic ASCII
  • EPSON
 となっています。
標準添付されているPDTファイル
添付の画面は、CA V.6のフォルダーとファイルの構成ですが、"Pdfpdf"というフォルダーの中にこれらの PDT ファイルが用意されています。この中で、"PAGES"プリンター用に使用するのは、”ibm5585.pdt"です。"ibm5587.pdt"は古いバージョンで、これを指定すると正しい印刷結果が得られないことがありますので、ご注意ください。
"ibm5577b.pdt"に関しては、かつて、このPDTを指定すると、罫線印刷用の SCSコマンドを 5577 用の罫線コマンドに変換できたというお客様からの情報をお聞きしたことがありますが、PCOMMやCAのバージョンが変わると変換できなかったこともありましたので、現時点では"ibm5577.pdt"との違いは無いと思われます。

プリンター・セッションのPDT印刷の設定方法は、プリンター・セッションの画面で、「停止」ボタンを押して「作動可能」ランプを緑から黒に変えた後、「ファイル」->「プリンター設定」を選択して表示された画面(添付)で、「PDTファイルの使用」欄にチェックを入れます。そうすると、「PDTの選択」ボタンが使える状態に変わりますので、このボタンを押します。
プリンター設定画面

PDT選択画面

そうすると、左のような「PDTファイルの選択」画面が表示されますので、使用するプリンターに合わせたPDTファイルを指定して、保存します。
インパクト・プリンターを使用する場合には、通常はこの設定だけで終了ですが、レーザー・プリンターの場合には、「縮小」や「両面印刷」といったプリンター制御のための設定が必要になります。そのためには、「PDFファイル」を編集して、それをPDTファイルにコンパイルする必要がありますが、その方法は次回にお話します。

2015年7月1日水曜日

繰り返し印刷の対策

Windows から LAN 接続されたインパクト・プリンターで印刷する際に、繰り返し印刷が発生する原因は、端的に言えば、Windows の標準TCP/IPポートが、プリンターからの印刷完了の通知(Ack)を待つ時間(Time Out)が、インパクト・プリンターにとっては短いことです。
では、対策は、待ち時間を大きな値に変更するということになりますが、私の知る限りでは、 Windows7 や WindowsServer2008 までは、変更する方法が見つかりませんでした。そこで、ポートを「UNIX印刷サービス LPRポート」に変更する -> レジストリーの編集によって、LPRポートの待ち時間を変更するという方法が考えられました。
元々 Windows では、LAN 経由の印刷用ポートとしては、この「LPRポート」が標準でした。しかし、下記のマイクロソフト社のページの情報にあるように、使用するポートの数が11個までとなっていたため、12個目の印刷ジョブの開始までに待ち時間が発生するという問題が発生しました。
https://support.microsoft.com/ja-jp/kb/179156/ja
その問題の解決のためには、記載されているように、レジストリーの編集が必要だったため、その必要が無い「標準(Standard)TCP/IPポート」が、新たに標準となったという経緯があります。
これは全く私の想像ですが、Windows の開発を行っているMS社があるUSでは、最早インパクト・プリンターは日本に比べて圧倒的に台数が少ないので、テストの対象になっていなかったのではないでしょうか?
設定の大まかな流れとしては、次のようになります。
  1. Windows 上の「Windows の機能の有効化または無効化」を使って、「LPD印刷サービス」「LPRポート モニター」を追加する。
  2. ドライバーのポート画面で「ポートの追加」を選択すると、「LPR Port」が追加されているので、これを使用して「LPRポート」を設定する。(ここで、「サーバーのプリンター名または印刷キュー」を入力する必要があります。基本的にはプリンターのLANカード固有の値になりますが、多くのケースでは「lp(半角小文字エルピー)」が使用できるようです。)
  3. PCの再起動を不要とするため、コマンド・プロンプト画面で「net stop spooler」と入力する。
  4. レジストリー・エディターを起動して、2 で追加した「LPRポート」のタイム・アウト値を変更する。(デフォルトは300秒 = 5分となっていますが、この値を大きくしても副作用は無いと思われますので、思い切って大きな値に変更しても良いと思います。)
  5. 併せて、11個までのポートの制限を外す編集を行います。
  6. レジストリー・エディターを終了して、コマンド・プロンプト画面で「net start spooler」と入力します。Spooler サービスの起動が確認できたら、終了です。
画面イメージ付の詳細な手順は、下記のサイトにありますので、ご参照ください。
http://www.ricoh.co.jp/pps/download/pdf/windows_lpr_jp_win7.pdf

2015年6月22日月曜日

繰り返し印刷とポートの設定

前回は、スプーラーに関わるお話でしたが、今回はスプーラーから印刷データが送信される先を指定する「ポート」のお話です。PC と LAN 接続したインパクト・プリンターを使って印刷していると、印刷が完了した後、あるいは途中のページから、先頭ページからの印刷を再開するという現象が発生することがあります。ページ数が多い、つまり量が大きいデータを印刷しようとする時に発生する可能性が高くなります。
プリンターを LAN 接続する場合、TCP/IP の機能の中の「LPR/LPD」という仕組みを使用して印刷します。Windows ではドライバーのプロパティの「ポート」に、通常は、「標準のTCP/IPポート」を使用します。「ポート」で指定された宛先に印刷データが送信されるのですが、その仕組みは次のようになっています。
  1. Windowsは初めに“Control File”をプリンターに送信します。Control File”には、PC側のホスト名やユーザー名、ファイル名を含みます。(下図
  2. 受信側のプリンター(実際にはネットワーク・カード)は、それを受信すると“Ackという受信確認を返信します。(下図 
  3. Control FileAckを受信すると、次にWindowsは“Data File”を送信します。(下図)“Data File”には、印刷データの他にデータ・サイズの情報が含まれます。 
  4. 受信側のネットワーク・カードは、データ・サイズと一致する印刷データを受信したら、“AckWindowsに返信します。(下図 
  5. Windowsは、このAckを受信して、印刷ジョブ送信終了とします。
問題は、Windows が最後の"Ack"を受信するまで待つ所定時間があって、それまでに受信されないと印刷失敗と認識して、先頭のページから印刷データを再送することです。その所定時間は公開されていないようですが、過去の実測値では約90秒でした。
プリンターから所定時間までに"Ack"を返信できない理由は、いくつか考えられます。
  1. 用紙ジャムや用紙切れが発生して、そこから回復するのに間に合わない。
  2. 印刷速度が遅いために間に合わない。
  3. ネットワークが混雑していて、データ通信に時間が掛かる。
インパクト・プリンターの場合、多くは「2」のケースですが、背景にはプリンターがどのタイミングで"Ack"を返信するように設計されているかが関係します。つまり、印刷までちゃんと完了してから"Ack"を返すものもありますが、データを受信を完了しただけで"Ack"を返すものもあります。(レーザー・プリンターの多くは、データ受信用のメモリー・サイズも大きく、後者の方式のようです。)
後者の方が、"Ack"の返信が早いので、繰り返し印刷の発生は防げますが、前者の考え方から見れば、「印刷完了しない内にプリンターの電源を切られたら、印刷中のデータは消えてしまう」という危険性もあるわけです。どちらの考え方が絶対に正しいということは無いと思いますが、5577や5400系のプリンターでは前者の考え方で設計されています。そうなると、インパクト・プリンターは、レーザー・プリンターに比較して印刷速度が遅いこともあって、その結果、印刷データのサイズが大きな印刷を行うと、繰り返し印刷を発生する可能性が高くなります。
また、先日もこの問題で、問い合わせをいただいたのは、カット紙を1枚ずつ手差し印刷しているケースでした。自動給紙に比べてどうしても1枚ずつ印刷する間隔が長くなってしまっていることも影響しているようでした。
この問題の解決方法は、長くなりますので、次回にまとめて。

2015年6月15日月曜日

Windowsスプーラーの役割

その後、パラレル・インターフェイスの規格も新しくなって、「セントロニクス」から「IEEE1284」という規格に移行したのですが、5577 系のプリンター側は、しばらくの間は大きな変化が無く、IEEE1284の中の「スタンダード」と呼ばれたレベルのままでした。
その結果、印刷すると文字化けや余計なページ送りといったお問い合わせが増え、その度にPC側のBIOS(バイオス)の設定で、パラレル・インターフェイスのモードを変更して、プリンターとモードを合わせてくださいという回答を繰り返していました。
IEEE1284規格の標準であるECPモードに対応したモデルが出たのは、2005年末の 5577-D02/C02 や 5579-N02 でした。ただこの頃になると、パラレル・インターフェイスでの接続よりも、LAN 接続の方が多くなってきていました。
さて、パラレル・インターフェイス接続であれ、LAN接続であれ、ドット・プリンターを Windows 上のプリンター・セッション経由でAS/400と接続する場合は、AS/400から見れば、あくまでもプリンター・セッションがプリンターになります。その先に接続され たプリンターで発生した用紙ジャムや用紙切れ等のエラー情報は、プリンターから PC までは通知されますが、AS/400までには届きません。

AS/400からの印刷データの流れを見ると、プリンター・セッションまでのデータ送信は非常に高速に行われますが、それと比較してプリンター、特にインパクト・プリンターのデータ処理速度、つまり印刷速度は非常に遅いものです。例えば、漢字を 150字/秒の一定速度で印刷できるとしても、(実際には、印字ヘッドの加速/減速や用紙送りの時間も掛かります。)24 x 24(ビット/1文字) x 150 = 86.4k bps(ビット/秒)にしかなりません。
その結果、プリンター・セッションから見ると、AS/400からはどんどんデータが送られてくるのに、プリンターへは少しずつしかデータを送れないということになります。この処理速度の差を調整しているのが、Windows の「スプーラー」になります。スプーラーは、ちょうどダムのような働きをしているわけです。プリンター・ドライバーのプロパティにおいて、「詳細設定」画面の「印刷ドキュメントをスプールし、プログラムの印刷処理を高速に行う」が、デフォルトで選択されているはずですが、これがその設定です。
プリンター・ドライバーのプロパティの詳細設定
ところが、Windows95の時に、この設定をその下にある「プリンターに直接印刷データを送る」に変更すると、プリンターで発生したエラーが、AS/400にまで通知され、ちょうど直結プリンターと同様に、OUTQの状態がMSGWTになるという情報が、お客様からのお問い合わせの中にありました。具体的には、Windows95 のPCではこの設定で使用していたが、WindowsXP のPCでも同じ設定を行うと、正しく印刷ができないという内容でした。
プリンターとの双方向通信が実質的にできて、お客様としては便利に使っていたということだと思いますが、私としては驚きました。
結局、その時は、WindowsXP対応のPCに変わることで、PC側の処理速度が高速になったが、プリンターの処理速度は変わらないので、Windows のスプーラーでその速度の差を調整しないと、印刷データが正しくプリンターに届きませんと回答したのですが、その結果、お客様は双方向通信では使えなくなったわけです。

2015年6月8日月曜日

プリンターへのデータの流れ - レベルE機能と双方向通信 -

5577系や5400系のインパクト・プリンターのパラレル・インターフェイスには、「コンバージド・モード」と「スタンダード・モード」の2種類があります。ただし、これは5577系のプリンターの場合の言い方で、5400系では前者を「PS/55モード」、後者を「PS/2モード」と呼んでいます。
「コンバージド・モード」とは、IBM 社内では全く日本独自の製品だった「5550シリーズ」から、ワールド・ワイド標準製品である「PS/2シリーズ」を元に日本語対応した「PS/55シリーズ」に切り替わる際に、両方のシステムの規格が異なるパラレル・インターフェイスどちらにも接続できるようにした、プリンターのインターフェイスの規格です。(「コンバージド」は、converged、即ち「統合した」という意味の単語です。)
コンバージド・インターフェイスと「レベルE機能」という言葉には密接な関係があります。
5550 時代や、その後の Windows のドライバー印刷では、インパクト・プリンターの場合、縦24 ドット(24 ビット = 3バイト)の幅の、横 1 行に相当するイメージ・データが送られてきて、プリンターは各ドットのオン/オフに応じて印刷するだけです。そのため、送信されたデータに問題があって、一部のビットのオン/オフが反転したとしても、そのドット(点)の白黒が逆転するだけですから、印刷結果全体には、大きな影響は与えないと判断されていました。しかし、PS/55時代のJ-DOSと呼ばれていたOSからの印刷では、文字データは、Shift-JIS形式の文字コードで送られるので、データ送信の問題によって、文字コードの一部の値に誤りが発生すると、全く他の文字コードになる、つまり全く違った文字を印刷することになり、これは避けなければならないことと考えられました。
そこで、ECC(Error Checking and Correction)、具体的には、プリンターにはデータを3回送信する、受信したプリンターは、3回のデータの内、少なくとも 2 回のデータが一致していれば、正しいデータと判断して印刷するという方式を組み込みました。これが「レベルE機能」と呼ばれるものです。データ量としては3倍になってしまいますが、印刷結果を保証するために考え出された方式です。
また、コンバージド・インターフェイスの機能を活用して、プリンターとシステム間の双方向通信も行っていました。3477等の、所謂「ダム端末(オンライン端末専用機)」や、PS/55上の5250PC(ホット・キーでDOS画面と5250端末画面を切り替えられました。)とパラレル・インターフェイスで接続したプリンターで、用紙切れや用紙ジャム等のプリンターのエラーが発生すると、それはプリンター側から端末を通じてAS/400まで伝わり、"MSGWT"となってユーザーにエラー通知されたものです。
同様に、初めてプリンターを接続した時には、直結型のプリンターを接続した場合と同様に、端末を通じてでも、デバイス(プリンター)として、AS/400上で「自動構成」されました。
5400エミュレーターを取り付けた様子

その後、コンバージド・インターフェイスが復活したのが、「5400エミュレーター」です。5400エミュレーターについては、いずれ詳しくお話しますが、5577系のドット・プリンターをAS/400とTelnet5250EでLAN直結するために作られたオプション製品です。これは、プリンターのパラレル・インターフェイスに取り付けるものですが、AS/400にプリンターの状態を通知するために、「コンバージド・インターフェイス」が活用されました。

これらのことは、AS/400直結型プリンターの場合と同様な、プリンターとAS/400間での双方向通信が実現していたということを表しています。
5400エミュレーター本体


2015年6月3日水曜日

プリンターへのデータの流れ - 電気的なインターフェイスについて

今の業務用のプリンターは、ほとんどがLAN(しかもイーサネット)接続となっていますが、それまでPCとの接続は、パラレル・インターフェイスが標準でした。(なお、プリンターの接続方法によっても、文字化けが起きることがあります。)
パラレル・インターフェイスと良く間違えられるのが、「シリアル・インターフェイス」です。
シリアル・インターフェイスは、プリンターではなく、主にモデムや測定器との接続に使用されました。シリアル・インターフェイスの規格として、「RS232C」や「RS422」という言葉を覚えていらっしゃる方もあるか思います。
「シリアル」という言葉には「順番に」という意味がありますが、正にデータを1ビットずつ順番に送信する方式です。「1車線」の道路を自動車が同じ方向に1台ずつ、順番に走って行くイメージです。RS232CやRS422の時代は、ケーブルを長くすることができるが、データ送信は遅いと認識されていましたが、今や、送信のタイミングが非常に速くなったため、HDDとの接続や、皆様お馴染みのUSBもシリアル・インターフェイスの仲間です。
「パラレル」には「並行に」という意味があります。8ビットのデータを並行して送信しますので、シリアル・インターフェイスよりも高速にデータ送信できます。そのため、プリンターの接続に標準的に使用されました。道路で言えば8車線の道路を8台の自動車が並んで走って行くイメージです。ただ、8ビットのデータを並べて送信できるようにタイミングを合わせる必要があること、またケーブルが長くなるとちょうどアンテナのようになってしまって、電気的なノイズを拾ってしまうことから、5577用等のケーブルは「5m」が最長で、これ以上長いケーブルは保証できませんと回答したものです。
パラレル・インターフェイスを使う機器として、PCとプリンターの間に「プリンター切り替え器」や「バーコード・ジェネレーター」というものが、市販されていました。前者は1台のプリンターを複数のPCで共有するためのもので、ダイヤルで切り替える手動式のものや、自動切換えのものがありました。後者は、専用のバーコード用コマンドを文字データとして印刷データに埋め込んでおくと、コマンドに応じたバーコードのイメージを作って、プリンターにバーコードをイメージとして送信するものです。

しかし、パラレル・インターフェイスの規格、初めは「セントロニクス」、その後は「IEEE1284 ECPモード」等は、どれも細かい部分まで厳密なものではなかったため、信号のタイミングやプラス・マイナスの規格がメーカー間で微妙に異なっていました。その結果、純正ケーブル以外のケーブルや、切り替え器を使用すると、「PCとプリンターの電源を入れる順序が決まっている」とか「連続用紙の印刷では途中で余計な改ページが発生する」とか「ゴミのような文字を初めに印刷する」といった不具合が発生しました。
比較的最近に多かったのは、USBパラレル変換ケーブルを使って接続すると、上記のような問題が発生するという報告です。5577や5400の現行モデルでは、LAN接続が標準で可能なのですが、それらの古いモデルや5573プリンターでは、PCとはパラレル・インターフェイスでしか接続できません。WindowsXPの時代はPCにもパラレル・インターフェイスが付属していたので問題にならなかったのですが、WindowsXPの保守が終了し、Windows7のPCへの置き換えが始めると、既存のプリンターと接続するために、USBパラレル変換ケーブルが使われるようになり、その結果、上記のような報告が増えたという訳です。
とは言うものの、Windows7以降でも、プリンター・ドライバーのプロパティの「ポート」に、シリアル・ポート用の「COM1」、パラレル・ポート用の「LPT1」が標準で用意されているのは、少し皮肉な感じがします。

2015年5月25日月曜日

文字コードの深い世界 - "はしごだか"は印刷できるか -

「たかはし」さんの「たか」の字の多くは、「くちだか」と呼ばれる「」という文字ですが、一方で無視できない数の「はしごだか」と呼ばれる「」の方がいらっしゃいます。(「くちだか」と「はしごだか」の違いが分かりますか?)
ところが、この「はしごだか」がコンピューターの世界では、あまり親切には扱われていないように思います。また、例えば、文字として入力も表示もできない携帯電話もあるようです。

IBMのホスト・コンピューターの世界では、EBCDICの文字コードの中では、「IBM選定文字」として特別に追加された文字のグループの中に、文字コード"x676B"が割り振られています。
5400全文字印刷の一部抜粋






同様に、5577等の内蔵フォントの文字コードShift-JISでは、IBM選定文字に対応する文字コードの中でも後ろの方に、文字コード"xFBFC"が割り振られています。
5577プリンター操作マニュアル抜粋














ユニコードの世界ではどうかと言うと、"9AD9"というコードが割り振られていますので、PCのみならず、携帯電話の世界でもユニコードに対応していれば、入力も表示も可能なはずと思います。
Windows付属ツール"文字コード表"の画面
どうも、この文字が、このような扱いになっている理由は、「」の「異体字」として扱われていて、JISコードでは、単独の文字コードを割り振られていないことが原因のように思われます。
「異体字」と呼ばれる文字は他にもあるのですが、現実には姓に使用されている、この「」が、様々な問い合わせをいただくケースが最も多いように感じます。
JISコードでは、文字コードが割り振られていないということは、内蔵フォントがJISコードになっている「ESC/Pモード」では、「」は、内蔵フォントを使った印刷はできないということになります。
【余談】ESC/Pモードは、EPSON社の日本語インパクト・プリンター用の制御コードの名称で、「イーエスシーピー」とか「エスクピー」と呼んだりします。昔、DOS/Vではプリンターの制御コード体系としては「標準」として扱われました。(5577モードが標準にならなかったのは、当時の市場全体の台数では、ESC/Pのプリンターよりも5577系の方が少なかったということと、IBM色が強くなり過ぎないようにという配慮があったのでしょうね。)
そのため、5577系のドット・プリンターや5400系のライン・プリンターでも対応しています。

次回からは、文字コードの話を離れて、他のテーマにしたいと思っています。

2015年5月18日月曜日

フォント(書体)の話 - JIS2004改訂で元に戻る


IBM書体に対して平成書体は、簡略化された漢字となっていて、この書体がJIS90年改訂で採用されたわけですが、その後、JIS2004年改訂では、正しい漢字(書体)に戻りました。以下の比較資料は、Adobe社の資料ですが、これを見ると、例えばJIS90年字形では、しんにょうの点が1つであるのが、JIS2004年字形では2つに戻るといった変更が行われたことが分かると思います。
余談ですが、昔、私が受けた研修の講師の方が、「進捗」の「」の旁は「」とは点の数が違うことを知っているかと言われたことを、今でも覚えています。この比較資料の中の85番の文字がそれですが、確かにJIS90年字形では「歩」になっていますが、JIS2004年字形では点が1つ減っていますので、講師の方のコメントは正しかったと言えると思います。
このような経緯の結果、今の時点では、プリンターの内蔵フォントを使って印刷する直結型のプリンターやドット・プリンターの場合、画面の文字と同じ書体の文字を印刷するには、初期設定で「IBM書体」を選択するのが適切というように、元へ戻ったと言えます。
ただし、前々回お話したように、CCSID1399バージョン1までの文字という制限は残ります。
JIS90年書体とJIS2004年書体の比較-1

JIS90年書体とJIS2004年書体の比較-2

JIS90年書体とJIS2004年書体の比較-3

JIS90年書体とJIS2004年書体の比較-4

JIS90年書体とJIS2004年書体の比較-5

JIS90年書体とJIS2004年書体の比較-6

JIS90年書体とJIS2004年書体の比較-7

2015年5月9日土曜日

フォント(書体)の話 - 平成書体とIBM書体

今回は、文字コードから少し外れて、文字の書体(デザインそのもの)についてです。
1文字をデザインするだけでも多額の費用が発生することをお話しましたが、それへの対策の一つが「平成書体」と聞いています。つまり、IBMも含めたコンピューター・メーカーが独自にフォントの開発を行うのを止め、共通のフォントを開発することで費用負担を減らすという狙いで「平成フォント協議会」(当時、流行っていたテレビ番組名をもじってそのように呼んでいましたが、正式な名前かどうかは分かりません。)を結成したと聞いた覚えがあります。
IBM書体と平成書体の違い-1
IBM書体と平成書体の違い-2
その結果、従来からのプリンターの内蔵フォントである明朝体のフォントにおいて、IBM書体と少し異なるデザインの文字ができたのは、避けられないことだと思います。もちろん、ほとんどの文字に違いは無いのですが、714文字には僅かにデザインが異なる箇所があります。そのため、5577系のドット・プリンターや5400系のライン・プリンターでは、初期設定で「IBM書体」か「平成書体」を選択できるようになっています。それらの文字の一部を表示しますので、間違い探しのように、どこが違っているか、見つけてみてください。 (お問い合わせをいただくケースが多かったのは、しんにょうの点の数です。)

平成書体は、Windowsのフォントに標準として採用されたことから、印刷結果の「互換性」を考えるとどちらの書体を使って印刷するかという判断が迫られることになります。つまり、Windows以前の時代からの印刷結果との互換性を重視するのであれば、「IBM書体」を選択することになりますし、PC画面の文字との互換性を重視するのであれば、「平成書体」を選択することになります。
【余談】
Windows以前のIBM 5550シリーズやPS/55では、画面の文字は、プリンターの内蔵フォントと同様に、コンピューター本体の中にあるディスプレイ用のカードに搭載されたメモリー内の内蔵フォントを使って表示されていました。その方式を大きく変えたのが、DOS/Vです。DOS/Vでは「ソフト・フォント」と言って、DOS/V自体がデータとしてフォント・イメージを持っていて、画面にそれを表示させていました。それ以来、Windowsでもフォントはソフト・フォントを使用するようになっています。
プリンターの内蔵フォントは、前々回ご紹介したような 24 x 24 個の升目を埋めるようにして設計されていて、このようなフォントを「ラスター・フォント」と呼びます。一方、Windowsで使用しているフォントは、大きさをポイント数で指定して自由に変えられるようになっていますが、このようなフォントを「アウトライン・フォント」と呼びます。画面の文字がラスター・フォントからアウトライン・フォントに変わっていった背景には、CPUの処理能力の急速な発達があります。アウトライン・フォントはCPUが計算して、ポイント数に合わせた大きさの文字の形を計算して表示しているのです。
因みに、「1 ポイント」は文字の高さを表し、「1/72インチ」(1インチ = 25.4mm)を意味しています。