始めの言葉

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

2016年2月13日土曜日

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

"Telnet5250E"接続の特徴は、次のとおりです。
  1. "Twinax"接続と同様の操作性を維持しています。具体的には、印刷中のスプールの"保留"、"取り消し"操作が可能です。プリンター・セッション経由の印刷では、OS/400 から見ると、PC 上のプリンター・セッションが仮想的なプリンターとなっています。PC が印刷データを受信する速度は、プリンターに比べて圧倒的に速く、また受信可能なデータ量も圧倒的に大きいため、スプールを解放した後、印刷中に"保留"したり、"取り消し"することはできません。"HPT機能"を使ったLAN 直結印刷の場合でも、原理は片方向印刷である"LPR"印刷ですから、OS/400 が印刷データを変換して送信し始めたら、やはり、"保留"も、"取り消し"もできません。
  2. OS/400 との接続構成は、"自動構成"です。プリンターの初期設定メニューの中で、接続先の OS/400 の "IP アドレス"と、"デバイス名"を設定すると、初めの接続時に、プリンターから OS/400 に対して接続しに行き、その"デバイス名"の装置記述を自動的に OS/400 上に登録します。なお、"Twinax接続"では、プリンターに設定したアドレス番号に対して、OS/400から接続しに行きますが、"Telnet5250E"接続では、プリンターから OS/400に対して接続しに行く点は、逆です。従って、プリンターの電源を切って、OS/400 プリンター間の"Telnet5250E"セッションを切断する時も、プリンターから OS/400 に対して切断しに行くことになります。(5400 シリーズでは、電源スイッチを切った際の電圧の低下を検知して、OS/400 に対して"Telnet5250E"セッションの切断要求信号を自動的に発信するようにできていますので、ユーザーはセッションの切断を意識することなく、電源を切ることができます。一方、5577 シリーズ本体の"Telnet5250E"接続機能では、予め操作パネルのスイッチを使って、セッションの切断要求信号を発信してから、電源スイッチを切るようになっています。)
  3. "Twinax"接続の時と同様、文字コードは"EBCDIC"のまま、制御コマンドも"SCS形式"のままです。その結果、バーコード・コマンドや罫線コマンドはそのままコマンドとしてプリンターに送信され、プリンターの内部で、バーコードや罫線のイメージを作って印刷します。そのため、データ・サイズが大きくなることはありませんので、罫線の多い帳票でも印刷速度を低下させることもありません。また、プリンター・セッション経由の印刷や"HPT機能"を使ったLAN 直結印刷では発生する制御コマンドの変換機能に起因する制限(バーコード・コマンドや大きな倍数の文字拡大、OCR-Bフォント等の半角フォントの指定が無効になる)もありません。
5400エミュレーターIIのTelnet5250設定Web画面
ただし、"Twinax"接続と異なるため、注意が必要なのは、"外字"の取り扱いです。"AS/400からの印刷 基礎編-3"でお話ししたように、"Telnet5250E"接続では、OS/400 は、外字も標準の文字と同様に、プリンターに内蔵されていると仮定して、文字コードを送ってくるだけです。そのため、外字の文字コードと文字イメージは、予めプリンターに記憶させておくことが必要になります。そのためのコマンドが、"LODPPW"コマンドです。使用可能な外字の数は、4,370 文字になります。

次回は、"Telnet5250E"接続の簡単な原理と使用事例をお話します。

2016年2月6日土曜日

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

1999年のiSUC(アイザック、1年に1回行なわれる AS/400 ユーザーの交流・情報交換会)で、"AS/400 印刷ガイド(中小型プリンター編)と称して行なったセッションの資料を読み返してみると、その中に"パフォーマンス・アップするには"というテーマのページがあります。そこでは、ライン・プリンターの"パフォーマンスが遅い現象"として、次の事例を記載しています。
  • <現象> AS/400 から、PC 経由で、罫線の多い帳票を印刷した時のパフォーマンスが、Twinax 接続時に比べて低下した。
  • <条件> PC の OS は、Windows95/98。PC とプリンターはパラレル接続。PDT印刷。
  • <対策> PC とプリンターの接続をパラレル接続から、LAN 接続に変更する。
  • <該当機種> "5400-006"、"5407-011"、"5417-011"
  • [解説] Twinax 接続の時には、罫線は、制御コード(コマンド)としてプリンターに送られてきます。しかし、PC経由の場合、PCOMM プリンター・セッションで、罫線はイメージ・データに変換されるため、データ量が非常に大きくなります。更に、Windows95/98 では、パラレル・インターフェイスでのデータ処理の優先順位は、他の処理に比べて低くなっています。そこで、優先順位が高いLANポート経由のデータ処理に変更することによって、パフォーマンスの向上が期待できます。
1999年iSUCセッション資料
今から見ると、ライン・プリンターの接続方式は、Twinax 接続だったこと、罫線がイメージ・データに変換されてデータ量が大きくなることが、印刷速度に影響すること、PC とプリンターの接続はパラレル・インターフェイスが標準だったこと、(ここには記載されていませんが)Windows95/98 では、LPR 印刷は標準機能ではサポートされていないため、何かLPR 印刷用のツールを導入する必要があったこと等、正に隔世の感があります。

当時、AS/400 側でも、IBM としての方針もあってと思いますが、Twinax 接続は標準ではサポートされず、徐々にオプションとなっていきました。そうなると、ライン・プリンターを中心とした、AS/400 直結型のプリンターも、LAN(実質的には、TCP/IP) 接続する必要性が高くなりました。その場合、Twinax 接続の世界で、ユーザーが永年慣れ親しんで、当たり前となっていた操作性を落とさずにLAN 接続に移行できることが求められます。その結果、ライン・プリンターを初めに採用されたのが、"Telnet5250E"です。
"Telnet5250"は、元々、TCP/IPの機能の一つとして、5250 端末の画面表示用に、IETF(The Internet Engineering Task Force)で決められた規格です。
https://www.ietf.org/rfc/rfc2877.txt 
Twinax 接続は、IBM が独自に決めた規格でしたが、Telnet の規格の決まった時代は、最早、規格を IBM が決めるのではなく、オープンな場で決める時代に変わったと言えるでしょう。
ただ、プリンターにはそのまま適用することはできません。何故なら、Twinax 接続では実現できていた
  • 用紙切れやジャム等のプリンターのエラー状態を OS/400 に通知する。
  • エラー・メッセージが表示された時に、"メッセージ応答"として、ページ範囲を指定して印刷再開する。
  • スプール送信中に、印刷の"保留"や"取り消し"を指定する。
  • もちろん、接続した時には、OS/400 上に装置記述が自動構成される。
といった機能も盛り込む必要があります。そのために拡張されたことを明示するために、プリンター用には、Telnet5250E(Enhancement)と呼んでいます。

ライン・プリンター"5400-006"用のオプション・カードを皮切りに、"5400"シリーズのライン・プリンターの各種モデル、連続用紙用のレーザー・プリンター"Infoprint 250(5300-025)"、小型のドット・プリンターや、PAGES モードを持つ小型レーザー・プリンター用のオプションである"5400エミュレーターII"等、AS/400 から印刷用に使用されるプリンターでは、Telnet5250E 接続となってきたわけです。
次回は、Telnet5250E の特徴や注意点をお話します。

2016年1月31日日曜日

HPT機能を使った印刷 - 追加情報 -

1. 印刷部数の指定
"HPT機能を使った印刷 - LAN 直結印刷の基本"の回で、印刷部数の指定は可能とお話したのですが、そのための設定を""HPT機能を使った印刷 - リモートOUTQの作成"の回でお話していなかったので、ここでお話しします。
印刷部数を指定できるようにするには、リモートOUTQを作成する時に指定するパラメーターの中で、宛先オプション"DESTOPT"に"XAIX"を指定する必要があります。
何故、その指定が必要なのかは分かりませんが、OS/400 の動きとしては、IBM Knowledge Center では次のように説明されています。

>XAIX を指定した場合、 リモート印刷装置書き出しプログラムは、プリンターへの接続を開き、 データ・ファイルと制御ファイルの複数コピーを送信します。
宛先オプション"DSTOPT"の指定

LPR 印刷では、データ・ファイルと制御ファイルのセットをプリンターに送信することを、以前にお話ししたことがあると思いますが、それを思い出してこの説明を読むと、指定された印刷部数の数だけ繰り返して、データ・ファイルと制御ファイルのセットをプリンターに送信すると読み取れます。
つまり、プリンターに対してコピー部数を指定するコマンドを送信するのではなく、コピー部数分だけ繰り返して同じ印刷データを送信するという意味になります。

2. HPT機能を使った印刷の3番目の指定方法
OS/400 上で印刷データ形式を変換する HPT 機能を使って、PC を介さずに LAN 直結印刷する方法には、実はもう一つ、"IPP"を使った OUTQ を使う方法です。"IPP"は、Internet Printing Protocol の略で、Microsfoft社が提唱する印刷データ送信方式です。提唱されてから何年も経ちますが、普及したと言えるところまでは行っていないようです。
TCP/IP の世界の印刷プロトコルの一つであり、最新のものなので、OS/400 でもサポートしているものと思います。OUTQ を作るには、装置記述を作り、装置タイプに"3812"を選択する点では、以前お話した SNMP を使用する方式と良く似ていますが、使用するポートが 631、6310 である点が大きく異なります。
最も大きな特徴は、"セキュア接続"と言った暗号化に対応した接続が可能なことだと思います。
自分自身では、かなり以前に、あるお客様のご要望でその設定を経験したことがあるのですが、詳細に関しては、機会を改めたいと思います。

次回からは、LAN 直結印刷の本命として、Telnet5250E接続のお話をしたいと思います。

2016年1月25日月曜日

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

この後は、Mapping Suite自体の説明になってしまいますが、最終的に印刷するまでの流れをご紹介します。
「表紙」と「明細」ページの設計ができたら、スプールの1ページ目には「表紙」、2ページ目以降は「明細」が適用さるかの確認は、同じ"MapDraw"の「マルチ・プレビュー」機能を使うとチェックできます。即ち、画面上の「マルチ・プレビュー」ボタンを押してから、画面右半分に表示されているスプールのページを1ページ目から進めていくにつれ、画面左半分のプレビュー画面が正しく切り替わるかで確認します。
その結果が正しいことが確認できれば、PCL モードを持ったプリンターに印刷する場合には、「プロジェクトの生成」、あるいは、PDFを生成してそれを印刷したり保管したりする場合には、「プロジェクトの生成」と「プロジェクトの関連付け」を行って、AS/400上の"IFS"にある"Mapping"指定のフォルダー"docpc"フォルダーの下に、プロジェクト・ファイルを保管します。
次に、保管されたファイルを、OS/400 のオブジェクトに変換するために、OS/400 上のMappingのメイン・メニューの中「MapDraw フォーマットの取り込み」を行ないます。
Mapping メイン・メニュー
これで準備ができました。

< PCL モードのプリンターに印刷する場合 >
Mappingは、OS/400 上で、PCL 形式の印刷データを生成し、それを宛先プリンターの OUTQ に送信して直接印刷させることができます。
コマンドは"MAPCPYSPLF"で、指定するパラメーターは次のとおりです。

1. 対象となるスプール・ファイルを特定するための値、Spooled file(ファイル名)、Spooled file number(ファイル番号)、Job name(ジョブ名)、Job number(ジョブ番号)、User(ユーザー名)

MAPCPYSPLFコマンド画面
2. 適用するMappingのフォーマットの値、Mapping Format(フォーマット名)、Sequence(シーケンス番号、サンプルのように「表紙」と「明細」を条件に応じて適用する場合には、*MRGを指定します。)

3. 送信先のPCLモードのプリンターのOUTQ(Ouput queue)と、そのライブラリー(Library)

4. コード・ページ(日本語のスプールの場合、半角カナか半角英小文字を指定するため、290は1027を指定)

以上の値を指定して「実行」すると、PCL モードのプリンターから印刷されます。開始ページや終了ページ、部数等の指定も一緒に行えます。その他にもPJL コマンドを付加して「両面印刷」等のプリンターの制御も可能ですが、そのお話は別の機会に譲ります。

< PDF ファイルを生成する場合 >
PDF ファイルを生成するコマンドは、"MAPSPLPDF"で、指定するパラメーターは次のとおりです。
MAPSPLPDFコマンド画面

1. 対象となるスプール・ファイルを特定するための値、Spooled file(ファイル名)、Spooled file number(ファイル番号)、Job name(ジョブ名)、Job number(ジョブ番号)、User(ユーザー名)

2. 適用するMappingのフォーマットの値、Mapping Format(フォーマット名)、Sequence(シーケンス番号、サンプルのように「表紙」と「明細」を条件に応じて適用する場合には、*MRGを指定します。)

3. PDF ファイルのファイル名(Name of this file)と、保管フォルダー(Path of the file)
ファイル名は、英数文字の他に日本語も使用可能です。保管フォルダーは、IFS 上になります。

4. コード・ページ(日本語のスプールの場合、半角カナか半角英小文字を指定するため、290は1027を指定)

< PDF ファイルを印刷する場合 >
MAPIFS2PRTコマンド画面-2
PDF ダイレクト印刷機能を持ったプリンターや、Windows ドライバーを使った印刷を行なう場合には、PDF ファイル生成後に、"MAPIFS2PRT"コマンドを使って、それらのプリンターの OUTQ に印刷データを送信します。指定するパラメーターは次のとおりです。
MAPIFS2PRTコマンド画面-1
1. 印刷するPDF ファイルの保管場所とファイル名(File to insert)

2. 送信されるスプール・ファイル名(Spooled file、これは任意の名前で構いません。)

3. 送信先のプリンターのOUTQ(Ouput queue)と、そのライブラリー(Library)

以上ですが、追加のパラメーターで指定できる"Insert this file before"と"Insert this file after"に、IFS上に保管した、PJL コマンドの開始用のファイルと終了用のファイルを指定すると、PDF ダイレクト印刷機能を持ったプリンターの場合は、両面印刷等のプリンターの制御ができます。


以上のコマンドを実運用の中に組み込むことによって、日常運用としてはMappingを意識することなく、印刷したり、PDF ファイルを保存したりすることになりますが、その具体的なお話は、Mapping Suite のご紹介の回に詳しくしたいと思います。

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印刷が前提となります。

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