始めの言葉

「プリンターから印刷できて当たり前」と、ユーザーからもSIerからも軽視されがちなプリンターの世界ですが、実際にはお困りだったり、思ったような印刷結果が得られないまま我慢してお使いの皆様のために、今までの経験が役立てばと、このブログを立ち上げました。印刷の基本から、応用情報、問題の解決方法を情報発信すると共に、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 FileのAckを受信すると、次にWindowsは“Data File”を送信します。(下図③)“Data File”には、印刷データの他にデータ・サイズの情報が含まれます。 
  4. 受信側のネットワーク・カードは、データ・サイズと一致する印刷データを受信したら、“Ack”をWindowsに返信します。(下図④) 
  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)を意味しています。