10-2. プリンタ&プロッタ '97 (1) プリント出力環境 * Canon LASER SHOT のイ−サネット接続 Canon のレ−ザショットは壊れない。LBP-8Π という10年前に買ったプリンタ、次に買 った LBP-B406 も本当に10年使えた。最後は紙送りのゴムみたいな部分が摺減り、紙を 送らなくなって、ようやく役目を終わえた。CADの図面出力で LIPS コマンドのファイ ルをばんばんプリントしていた。夜間に数百牧、連続出力することも度々あった。EWS から RS-232C 接続で出力していたが、十分使用に耐えたと思う。 当時はまだ、イ−サネ ット接続できるプリンタはなかった。最近のレ−ザショットは、イ−サネットに直付けで きる。ここ1年ぐらい様子を見ているが問題はないようである。ノン・トラブルでがんば ってもらいたい。最近買ったリコ−のプリンタ、まだ半年ぐらいしかならないのに、紙詰 まりを起こしたりして来ています。ちょっと不安です。 Canon LASER SHOT は JC-CONNET というボ−ドを入れて、イ−サネット対応のプリンタに する。LASER SHOT にIPアドレスを振り、TCP/IP ネットワ−クのメンバ−にする。 lpd デ−モンはこの LASER SHOT で稼働する。他のEWSからは/etc/printcap でリモ−ト・ プリンタの設定を行う。これで機嫌よくプリント出力してくれれば問題はないのだが、フ ィルタ−をかけて出力しようとすると困ったことになる。紙をバインダ−にとめるために、 左マ−ジンをとりたいとか、日付けも入れたいとかなると対応できないのである。それに どうも連続出力すると文字化けしたり、何か調子が悪い。どうもスプ−ル制御がおかしい みたいである。これは Canon とボ−ド・メ−カに問い合わせても原因は分からずにいる。 手元のEWSの printcap にフィルタを設定してもこれは無視される。基本的にプリンタ を制御しているところの lpd の printcap でしかフィルタは設定できない。 それならば LASER SHOT の printcap でやればいいのだが、 そもそもここには printcap ファイルが ない。printcap 相当の設定部分はあるが、 ごく単純な設定しかできない。ではどうする か?。lpd デ−モンに渡す前に例えばマ−ジンをとってしまう。Sun の SPARCprinter で は十分有効に働いた。しかし LASER SHOT では、これも何枚か連続して出すとおかしくな る。前のが続いて出てしまう。LASER SHOT はイ−サネット経由でも RS-232C 経由でも出 力できる。両方使えるようにしておいて、 フィルタ−をかけたい場合は RS-232C 経由で 出すのが現実的な妥協案である。 /usr/local/bin/lpy << 左マ−ジンをとって出力するスクリプト。 ---------------------------------------------------------- |#!/bin/sh |/bin/sed -e 's/^/ /' $1 | /usr/ucb/lpr -Pprinter * PostScript 対応プリンタ EWSで Netscape Navigator や Ghostview の画面、 それにだんだん多くなってきてい る PDF 文書をプリント出力するには、PostScript 対応プリンタが必要である。 Windows の方はどれもノ−マルなプリンタでいいのだけれども。Adobe など純正の PostScript プ リンタは結構高価である。何年か前からノ−マルなプリンタを PostScript プリンタにす るソフトがリコ−から出ている。プリンタ側にこのソフトを入れたタイプがリコ−から発 売された。試してみたところ、Sun の SPARCprinter( これも PostScript プリンタ ) の 出力とまったく遜色なかった。おかしな出力になるところも同じである。こちらはネット ワ−ク対応なので出て来るのも頗る速い。以下リコ−の PostScript 対応A3プリンタ。 PC LAZER NX-500 248,000 円 R-PS モジュ−ルタイプA 65,000 円 RICOH-SCRIPT2 対応モジュ−ル イ−サネットボ−ドタイプB 78,000 円 * Windows パソコンからのプリント出力 "6-6. Windows ネットワ−ク、(3) Windows パソコンのプリント出力環境" を見られたい。 パソコンとプリンタが同じセグメントにある場合は問題ないが、ル−タをはさんでプリン ト出力するのはやや難しい。 その場合、Windows パソコンに HLPRMON というフリ−ソフ トを入れると、プリントできるようになる。 RICOH NX-500 と Windows 98 で、問題なく 動作することを確認している。Excel や Word のファイルもちゃんと出てくれる。`22/12。 * おまけ:一般的な PostScript ファイルの仕様 簡単に PostScript の特徴を説明しよう。それから超簡単なサンプルを示す。特に本書で ここまで説明する必要はないかも知れないが、PDF も結局は PostScript であり、また各 種画像変換で EPS ファイルが使われている。Illustrator なんかはまさに EPS ファイル を扱う。Illustrator のデ−タ形式は EPS を独自拡張したものなのである。 各種ドロ− ツ−ルも EPS 読み込みを結構サポ−トしてきている。 このため、これらのベ−スとなる PostScript についてある程度知識があった方がいいように思う。PostScript は言語仕様 が公開されたのは1984年8月のことである。結構永い歴史があるのである。 先ず PostScript は HPGL や DXF などのように扱い易いフォ−マットではないこと。 単 なる図形、テキスト記述言語ではない。プログラム言語なのである。計算や変数、それに スタックを扱えるようになっている。記述は本当複雑である。特に、変数とスタック辺り の記述はアセンブラを想起させるほどややこしい。 それに PostScript のデ−タは HPGL などのように、プリンタに送ったらそれで終わりという訳でなく、フォントデ−タなどを コンピュ−タに探しにいったりと、まさにプログラム的な動きをする。ここら辺りの仕組 みにより、マクロウィルスというセキュリティ上の問題を起こす原因になった。 もう一つ覚えておいた方がいいことがある。 BoundingBox、これは PostScript デ−タの 図形、テキスト全体を囲む範囲である。表示した時に、ともかく絵が描かれている範囲が BoundingBox である。下のサンプルにも、頭の方に BoundingBox の変数が見える。 この 値をちゃんとしておかないと、うまく表示、印刷できない場合がある。特に、PostScript ファイルを自分で書いた場合は要注意である。このような時は、BoundingBox を計算して くれるフリ−ソフトを使ってみるとよい。aimaker にはその機能が入っている。似たよう なので ps2ai.ps というのもあるが、これは計算してくれない。 もう一個おまけ。PostScript では長さを表わすのにポイントという単位を使う。 注意す ることは、従来の印刷でいうポイントとDTPの世界でのポイントでは長さが異なってい ることである。DTP、つまり PostScript では、72 Point が 1 inch ( 25.4 mm )であ る。72 mm の線分は、PostScript では 25.4 mm であり、 1 Point は 0.3527 mm になる。 印刷した時のことを考慮すると、細い線は実用上 0.3 Point ぐらいまでである。 temp.ps ------------------------------------- |%! %! が PostScript フォ−マットである印し。 | |%%Title: test_data タイトル |%%Creator: katou 作成者 |%BoundingBox: 0 0 100 100 図形全体を囲む領域。 |%%EndComments | |/SOLID { [] 0 setdash } bind def 変数定義部。ここでは線種を定義している。 |/DOTTA { [3] 0 setdash } bind def 点線。適当に何でも設定する。 | |/Mline { 2 setlinewidth } bind def 線幅の定義。 |/Dline { 1 setlinewidth } bind def bind def はペアで使うと思えばよい。 | |SOLID 実線を設定。 |Mline 線幅を設定。 |100.000 100.000 moveto 座標 (100,100) から (200,200) へ線をひく。 |200.000 200.000 lineto |stroke stroke までで、1個の図形を表わす。 | |DOTTA 点線を設定。 |Dline 線幅を設定。 |150.551 150.338 moveto |503.149 191.338 lineto |stroke | |save 文字を1つ描くにつけ save-retore で囲む。 |/Courier findfont |[85.0 0 0 72.8 0 0] makefont 文字のサイズを設定する。 |setfont |100 500 moveto |0.000 rotate 回転指示。degree 単位。 |2.8 0 (Haruo kun desu)ashow 2.8 はX方向の文字間隔、0 はY方向 |restore のため常に0に設定する。 | |save |/Bold-Italic findofont |10 scalefont 文字サイズを幅、高さとも 10 Point に |setfont 設定する。 |100.000 300.000 moveto 文字列の開始位置。 |20.000 rotate 20 度回転させている。 |2.8 0 (heno heno mohe)ashow 文字列を表示する。 |restore | |showpage 最後に必ずこのコマンドをつける。 [ 文字サイズの指定 ] 形式1 10 scalefont これらは、同じことを表わす。 形式2 [10 0 0 10 0 0] makefont 文字を 10 ポイントに設定する。 [ a b c d e f ] a: 文字幅 b: 文字列の傾き、degree 指定 c: 文字の傾き、degree 指定 d: 文字の高さ e: X軸方向へのオフセット量(移動量) f: Y軸方向へのオフセット量(移動量) * おまけ:Illustrator で読み込める最低限のファイル仕様 -------------------------------- |%!PS-Adobe-2.0 EPSF-2.0 [ヘッダ−部] |%%BoundingBox: 144 144 288 288 |%%Title: ????? Title, TemplateBox, AI3_Margin は特になくて |%%TemplateBox: 0 0 612 792 もよい。 |%%AI3_Margin:0 0 0 0 |%%EndComments | |%%BeginProlog [コマンド定義部] | ユ−ザが独自に定義しても、デ−タ部で使用する | 際エラ−になる。 |%%EndProlog BeginProlog と EndProlog だけでも読めた。 | |0 g [デ−タ部] |0 G | |[] 0 d 線種なんかを DASH_LINE等と定義したいが、展開 | した形でないと受け付けない。 |144.0 144.0 m |144.0 286.0 l |288.0 288.0 l |288.0 144.0 l 円と円弧は曲線デ−タにしておかなければダメ。 |S | |%%Trailer [エンド部] Trailer は必要である。 |showpage * おまけ:Illustrator の円、円弧の構造 円、円弧の PostScript コマンド arc は、Illustrator では受け付けない。Bezier 曲線 curveto として表現しなければならない。 Bezier 曲線では1つの曲線区間を表示するの に4個の制御点(2個のベクトル)を用いる。 この制御点を Illustrator ではアンカ− ポイントと呼んでいる。Bezier 曲線の場合、Spline 曲線のように制御点を通過する訳で はない。制御点できる領域は円、円弧を包み込む領域になる。以下は円の表現である。 --------------------------------------- |%%BeginProlog |/a {arc} def 中心 100,100 半径 50 の円。 |%%EndProlog |100.000000 100.000000 50.000000 0 360 a << これはダメ!。 |S aimaker で変換した。これは通る -------------------------------------- |%%BeginProlog |/c {curveto} def 4つの Bezier 曲線に分解される。 |%%EndProlog |150.0 100.0 m |150.0 127.614 127.614 150.0 100.0 150.0 c |72.386 150.0 50.0 127.614 50.0 100.0 c |50.0 72.386 72.386 50.0 100.0 50.0 c |127.614 50.0 150.0 72.386 150.0 100.0 c |S | mx my | 1x 1y 2x 2y 3x 3y c | 4x 4y 5x 5y 6x 6y c | 7x 7y 8x 8y 9x 9y c |10x 10y 11x 11y 12x 12y c |-----------------------| | | | | 4 3 2 | | * * * | | 5 * | *1 | | | | 3-2 の間隔 27.614 ,半径 50 の円 0,100|---6-*-----|-----*-m-12| | | | 27.614/50 = 0.55228 | 7 * | * 11 | | * * * | | 8 9 10 | 円の場合、半径の 0.55283 倍の間隔で制御点を | | | 配していけばよい。 |-----------------------| 0,0 100,0 (2) UNIX系 printcap の設定 * 概要 [ 設定手順 ] 1. lpr コマンドを使いたいホストで、lpd デ−モンを稼働させておく。 2. /etc/printcap を各ホストで設定する。設定の変更はすぐ有効になる。 3. /etc/printcap に記述したスプ−ル・ディレクトリを作成する。パ−ミッショに注意。 [ 注意点 ] ・printcap や lpr コマンドは BSD4.3 UNIXでの話である。System V 系のプリント制 御もあるにはあるが、昔からあまり評判はよろしくない。Silicon Graphics 社のマシシ ンは System V 系UNIXだが、同時に lpr、printcap をサポ−トしている。 ・% lpr file とすると、プリンタ名 lp をデフォルトでとり、% lpr -Plp file と同じこ とになる。デフォルト名 lp は setenv PRINTER name で変えることができる。 ・バ−ナ−、通称花文字を出さないようにするには、printcap で :sh: と指定する。バ− ナ−はデフォルトでは :sh=false: をとり、バ−ナ−を出すことになっている。sh の型 は論理値なので、false に対して true と書けばバ−ナ−が出ないのかといえば、 そう ではないらしい。:sh=: と書いてもバ−ナ−は出てしまう。必ず :sh: とすること。 ・従来UNIXでプリンタを使うには、UNIXマシンにプリンタを RS-232C ケ−ブルで シリアル接続するか、あるいはパラレル接続するのが一般的だった。 扱い易いのはシリ アルの方で XON/XOFF 制御あたりがよく使われた。 パラレル接続はUNIXでの資料が あまりなかったので、よく分からないが速度的には RS-232C よりだいぶ速かった。 ・現在はプリンタがほぼ標準でネットワ−ク対応してきたので、TCP/IP 接続となる。問題 はプリンタ内部に printcap 相当の設定部を持つことで、 UNIXの printcap と同じ ではない。サポ−トされる機能が限定されたりする。 またリコ−のプリンタでは縦、横、 A3、A4出力を分けるのに、プリンタのパネルでそれ相応の設定をして、 プリンタを 使うUNIX側では printcap ファイルに filetype=p1 などと記述したりする。 * 基本 [ プリント出力の経路 ] RS-232C TCP/IP <-------------- lazer2 <---------- lshot2 Canon Apollo Indy ホスト名 ------- RS-232C ------- ------- | lpd |-----------| lpd | | lpd | ------- 8 ------- 1 ------- 2 | | | -----*-----------------*----------------*---- 192.10.10.0 TCP/IP <--------------------------------- lp <------------ lazer/lp <-------- lshot [ Indy から Canon にネットワ−クを使ってテキストを出力する ] % cat /etc/printcap ---------------------------------------------------------------------- |lp:\ エラ−ログファイル | :lp=:rm=Canon:rp=euc:sd=/var/spool/lshot:lf=/var/spool/lshot/log: lp=: --- リモ−トプリンタの場合、ここは無指定にする。 rm=Canon:-- リモ−トプリンタのホスト名。/etc/hosts に登録されていること。 rp=euc: --- LASER SHOT の JC-CONNECT C-5000T ネットワ−ク・ボ−ドでEUCに 変換してプリンタに出力する。rp=lp 指定の場合は何も変換せず、直接 出力する。PostScript や LIPS デ−タのファイル出力に使う。 /etc/hosts << Indy の hosts ファイル。 --------------------- |192.10.10.8 Canon % cd /var/spool << スプ−ル・ディレクトリを root ユ−ザで、ここでは lshot 名 % mkdir lshot で作る。そして UID, GID を daemon に変更する。 別に変更し % chmod 755 lshot なくてもプリント出力はできるが。一応そういうことなので。 % lpr temp.txt << EUCファイルをプリント出力する。-Plp を省略している。 % lpr -Plp temp.txt * 応用 [ Indy から Apollo を経由してネットワ−クを使ってテキストを出力する ] % cat /etc/printcap ------------------------------------------------------------------------------ |lshot:\ | :lp=:rm=Apollo:rp=lazer:sd=/var/spool/ls:lf=/var/spool/ls/log: ↑ ホスト名 Apollo が lazer というプリンタを制御していると見る。 $ catf /etc/printcap ------------------------------------------------------------------------------ |lazer|lp\ << lazer を lp としても登録している。 | :lp=:rm=Canon:rp=euc:sd=/usr/spool/lpd/lshot:lf=/usr/spool/lpd/lshot/log: /etc/hosts << Apollo の hosts ファイル。 --------------------- |192.10.10.8 Canon $ lpr -Plazer temp.txt << ファイルの66行分出る。66行がデフォルト。 $ lpr temp.txt << lazer は lp としても登録している。これでもよい。 % lpr -Plshot temp.txt << Indy -> Apollo -> Canon と経由してプリントされる。 [ Indy から Apollo を経由して RS-232C を使ってテキストを出力する ] % cat /etc/printcap ------------------------------------------------------------------------------ |lshot2:\ | :lp=:rm=Apollo:rp=lazer2:sd=/var/spool/ls:lf=/var/spool/ls/log: $ catf /etc/printcap ------------------------------------------------------------------------------ |lazer2|line printer:\ | :pc=/usr/apollo/bin/prf -pr l:\ | :lp=/dev/null:sd=/usr/spool/lpd/lp:if=/usr/lib/lpf:\ | :af=/usr/adm/lpacct:lf=/usr/adm/lpd-errs:\ | :sh: << バ−ナ−、通称花文字を出さないようにする。 | |#lazer2|line printer:\ << フィルタ−のかけ方の参考。前の # はコメント。 |# :pc=/usr/ucb/expand -4 | /usr/apollo/bin/sj2euc | 続く |# /usr/apollo/bin/prf -pr l -banner off -headers on -left 1:\ ↑ % lpr -Plshot2 temp.txt Apollo のプリントは実際は prf コマンドを使っている。 $ lpr -Plazer2 temp.txt (3) lpr コマンドの使い方 * 正常な場合 % lpq -Plshot << プリンタはスタンバイしてます。 ここからは参考程度 Printer Ready で見て下さい。 % lpr -Plshot temp.txt % lpq << 正常な場合は、 すぐにキュ−からプリンタに送られる。 Indy: sending to Apollo Rank Owner Job Files Total Size 1st katou 59 temp.txt 1005 bytes $ /usr/ucb/lpr temp.txt << Apollo からの出力です。続けてコマンドを打ちました。 $ /usr/ucb/lpq 直ぐにファイルをプリンタに送っていると分かります。 printing via /usr/apollo/bin/prf -pr l Rank Owner Job Files Total Size active katou 0 temp.txt 349 bytes $ /usr/ucb/lpq no entries * Indy から Apollo 経由で Apollo の lpd が止まっている場合 % lpr -Plshot temp.txt % lpr -Plshot2 temp.txt % lpq << 溜まっている状態をみる。 Indy: waiting for Apollo to come up Rank Owner Job Files Total Size 1st katou 59 temp.txt 1005 bytes 2nd katou 60 temp.txt 1005 bytes % lprm - << 全部キャンセルする。 もしこれでキャンセルできない dfA059Indy dequeued 場合、 ひょっとするとロックファイルができているか cfA059Indy dequeued も知れない。 スプ−ル・ディレクトリに lpd.lock が dfA060Indy dequeued あれば強制的に消去すること。 cfA060Indy dequeued connection to Apollo is down * スプ−ル・ディレクトリに溜まっている状態 % ls -al /var/spool drwxr-xr-x 2 daemon daemon 512 2月 3日 17時23分 lshot % ls -al /var/spool/lshot -rw-r----x 1 root lp 4 .. .seq -rw-rw---- 1 daemon lp 76 .. cfA061Indy -rw-rw---- 1 katou lp 1005 .. dfA061Indy << プリントファイル。 -rw-r--r-- 1 root lp 5 .. lock -rw-r--r-- 1 daemon daemon 0 .. log -rw-rw-r-- 1 root lp 34 .. status * スプ−ル・ディレクトリを作成していない場合 % lpr temp.txt lpr: cannot create /var/spool/lshot/.seq * lpc コマンドでプリンタの状態を見る % lpc << このコマンドは色々使える。Apollo は /etc にある。 lpc> status lp: queuing is enabled printing is enabled no entries << スプ−ルされると 1 entry in spool area などと出る。 no daemon present lshot: queuing is enabled printing is enabled no entries waiting for Apollo to come up lpc> help abort enable disable help restart status topq ? clean exit down quit start stop up * リコ− NX-500 ネットワ−ク対応プリンタの状態 % lpq -Pricoh ネットワ−ク対応プリンタは、それぞれに癖 Printer status : Idle.(Normal.) がある。 このリコ−のプリンタは rsh, rcp, Online/Offline : Online. ftp でもプリントできるし、状態なんかも表 No Entries. 示できる。 * できそうでできないプリント出力 □ Canon ネットワ−ク対応プリンタ | -------------------- | Router ■ □ Windows95 | | -------------------- こんな構成で Windows の Netscape の画面をプリンタに、TCP/IP 経由でプリントしたい。 できて当り前なような気がするのですが、どうやってもダメです。プリンタのプロパティ で "印刷先のポ−ト" にプリンタのIPアドレスを入れたり色々やってみましたが、一体 どうなっているのでしょうか。 Windows NT をプリントサ−バに仕立てないとダメなのか な。ああでもないこうでもないと、Microsoft の丸いマウスをプチプチやっていたら右手 が痛くなってしまった。どうも Windows の設定画面の挙動もだいぶおかしいです。 (4) 市販プリンタ&プロッタ * プリンタの種類 [ レ−ザプリンタ ] 以下98年10月に記載。レ−ザプリンタは安くなったし、A3も数年前からプリントで きる機種が発売されるようになり、CAD図面の出力には重宝する。Canon なら LIPS で、 RICOH なら PostScript できれいな図面を出すことができる。 TCP/IP 対応も当り前にな ったし、しかしネットワ−ク対応プリンタはまだ注意する必要がある。連続出力するとお かしくなる場合がある。プリンタのスプ−ル・メモリは多目にした方がいいみたいである。 出して見ないと分からないのが困りもので、 Canon でも RICOH のプリンタでも同じこと がいえる。TCP/IP のネットワ−ク・プリンタとしては Canon のレ−ザショットより、リ コ−の方が断然プリント出力が速い。耐久性はどうもレ−ザショットの方が勝っているが。 [ カラ−プリンタ ] 安いのから高いのまである。安いのは3万円ぐらいで、インクジェット方式の時間がかか るもの。個人用には Canon のイメ−ジスキャナにもなるものがいいと思う。 レ−ザプリ ント方式のは50万円ぐらいから、DTPもOKの PostScript 対応になると150万円 ぐらいまである。実際購入の検討する際には、紙代などランニングコストも考えた方がい い。気軽にカラ−プリントできるようでなければ、宝の持ち腐れになる。今後は1フロア −に1台は欲しいところである。 [ CAD用プロッタ ] ここではペンプロッタは省く。CAD用プロッタには、静電プロッタと普通紙プロッタの 2種類ある。現在では普通紙プロッタが主流になっている。かつてはA1図面出力と言え ばカルコンプという時代もあったが、昔の話である。CADAMなんかはまだカルコンプ を使うのかも知れないが。導入に当たっては、サポ−ト体制がやはり決め手になる。図面 が出ないのは1日でも半日でも困るわけで、すぐに修理にきてくれるメ−カでないと困る。 その点ゼロックスは、どうしたって他メ−カよりも保守体制が充実していると言わざるを 得ない。またどうもそれで儲けているよう気がしないでもないが。 保守契約はゼロックスを初めどこでも、枚数のカウント制である。コピ−機のなごりでど うも技術系の機器にしては納得がいかない制度である。ゼロックスはがんとしてこの制度 を見直すつもりはないようだが、セイコ−電子工業は柔軟に対応するとのことである。だ いたいの使用枚数から毎月の費用を出して、見直しは1年単位でもOKとのことだ。この 場合トナ−は消耗品扱いになり、別途購入することになる。 カウント制の理由は、ドラムの交換が非常に高物につくからということだ。97年ぐらい まででは30〜50万円した。今はもう少し下がっているが。このドラム交換費用も含ん だ課金体系でもって、保守料金にしているかららしい。ちなみに普通のレ−ザプリンタは、 トナ−とドラムが一体になっていて一括で交換するようになっている。まあ大型プロッタ はドラム回りの不具合が多いのでということらしいが。それにしてもよく故障するように 思う、ゼロックスは。他のメ−カはどうか知らないが。 * CAD用プロッタ製品 現在ゼロックスでいえば BrainTech 9050 である。4024 はもうない。 BrainTech 8180α というのもある。コピ−、プロッタ、スキャナとなる多機能プロッタで1500万円ぐら いする。それに EDMICS 2000 というのもだいぶ以前からある。 これは図面管理システム で、ゼロックスはこれで ISO-9001 に対応しようと盛んに宣伝している。値段はよく知ら ないが、これは高いよ、2千万円ぐらいだったような。しかしこんなので図面管理を始め ると、光ディスク・システムと似たようなことになりはしないか。ちょっと心配になる。 XEROX 4024 91年頃発売 > HP-GL, CalComp オプション対応。 イ−サネット対応するにはパソコンをかます必要があった。パソコンと 4024 の接続は シリアルかパラレルなので、あまり意味はない。しばらくして 4024Π というのが出て、 イ−サネット対応になった。 4024 はA1出力のベストセラ−といえばベストセラ−だ った。小生このプロッタのすぐ横にいたのだが、オゾンか何か知らんが本体横からファ ンの排気が出ていて気分が悪くなったことがある。ある会社ではダクトを取り付け、外 に排気しているのを見たことがあった。管理者はこうしたことも要チェックである。 XEROX BrainTech 9050 97年頃発売、もう少し前だったか > 約400万円。HP-GL、HP-GL/2、HP-RTL、C/C2(HP-GL 準拠,HP-GL/2 準拠)。 RS-232C、セントロニクス、イ−サネット標準装備。Windows Driver ソフトあり。4024 の奥行きの半分、4024 の後継機種。ラスタ−デ−タは HP-RTL 標準、CALS/TIFFフォ− マットをオプションで対応。ベクタ−/ラスタ−デ−タの重ね合わせ出力が可能である。 98年11月時点、9050 の後継機種 8050 が発売されるもよう、価格は同等。 SII LP-2150 いつ発売になった、最近だぞ。 > A1サイズ モノクロLEDプロッタ。セイコ−インスツルメンツ(株)。 セイコ−電子 工業のこと。最初ゼロックス 4024 のエンジンを使っていたが、 4024 より故障しにく いエンジンを独自開発して、この機種を作ったということである。このメ−カは静電プ ロッタの老舗で、今は LP-2150 に力を入れている。 今後、保守の拠点も増やしていく とのことで、注目したい。約350万円から。この機械よく見ると BrainTech 9050 と そっくりである。どうやら今度はゼロックスにセイコ−が OEM 供給しているらしい。 アウトラインフォントをオプションで対応する。これで文字がきれいに出る。いらんか。 RS-232C, セントロニクス, イ−サネット 10 Base-T 標準装備。Windows ドライバ−ソ フトあり。D-SCAN & ラスタ、D-SCANC(HP-GL)、D-SCANC2( HP-GL/2,HP-RTL )、TIFF G4、 それに CALS G4TYPE1(Option) 対応。http://www.sii.co.jp/siid/pl/ SII LP-2160 99年版よい子のお勧め > LP-2150 の後継機種である。イ−サネットが 10/100 Base-TX になっている。自動認識、 固定設定ができる。プロッタで 100 Mbps にする意味があるのかと思っていたが、ベン チマ−クでは、やはり速く図面が出てくるとのことだ。まあこれからは何でも100 Mbps だな。オプションの TIFF/CALS フォ−マット出力は、 これから必要になってくるだろ う。付けておいた方がいい。20万円だし。なぜかというと大手企業の購買部門を中心 にドキュメントの画像フォ−マットに TIFF を採用してきているからである。 2150 を見ていた時はあまり気にとめなかったが、lpr のこと。2150 でも対応している はずだが、2160 はちゃんと対応していることを確認した。 lpr によるプリントサ−バ の機能である。セイコ−電子はル−タなんかも作っているので、 まともな lpr だと思 う。期待したい。D-SCANC フォ−マットについて補足。 これは HP-GL の互換フォ−マ ットである。ちゃんと D-SCANC のフォ−マット解説書もある。ゼロックスも HP-GL 互 換プロッタであることは変わりないが、ドキュメントはないのだと。 * その他 ・HP-GL/2 フォ−マットはイメ−ジも含めることができる。 ・出力機器を 100 Mbps で接続する意味はあるか、多分ない。 ・CADのプロット出力のフォ−マットは LIPS, HP-GL が一般的である。 ・今後はラスタ−、ベクタ−重ね出力できるプロッタがいいかも。 * その後の製品動向 98年末だが。どうもプリンタもプロッタも複合機としての性格を強めた製品になってき つつある。プリンタはプリント以外にコピ−、ファックスにもなるよというのが出てきて いる。プロッタもただ図面を出力するだけでなく、A1のイメ−ジスキャナとセットした 製品が出てきた。SII LP-2160 やゼロックスにもあったような。これらの何でもできるよ みたいな製品は、"よい子のイントラネット" としては評価できない。シンプル・ イズ・ ベスト。そして壊れない、安心して毎日使えることこそ重要なのである。各メ−カ今後ど のように製品展開していくか知らないが、従来の簡単明瞭な製品はぜひ残していって頂き たい。コピ−機もファックスも同じことが言える。 * リコ− NX-500 プリンタのネットワ−ク設定 ネットワ−ク対応プリンタの設定のやり方を少し説明しておく。たいがいどこのメ−カの ものでも設定方法は同じようなものである。プリンタにはあらかじめ 192.168.10.1 とい うようなIPアドレスが降られている場合が多い。それで telnet アクセスしてIPアド レスやらネットマスクやら付け直す。ネットワ−クが複数ある場合は、デフォルト・ゲ− トウェイもちゃんと設定しておく必要がある。 プリンタで routed や route コマンドが 使える製品はないのでないか。経路制御は default gateway だけである。 後、いらない プロトコルは使わないようにしておく。例えばマッキントッシュのパソコンが1台もない のに AppleTalk は必要ないということである。 不要なパケットを送出する原因は極力減 らすことが肝要である。 % telnet 192.168.10.1 User access verification. RICOH NIC Maintenance Shell. 00:00:77:66:33:55 Password: << パスワ−ドのデフォルトは ricoh。 User access verification ... OK. RICOH NIC Ver. 3.0.8 (C83RMULTI) Copyright (C) 1994-1997 RICOH CO,.LTD. msh> status Printer status : Processing data from TCP/IP I/F.(Normal.) Online/Offline : Online. ID Source Process Status -------------------------------------------------- 28 192.168.10.1 lpr Active msh> show Common: Protocol Up/Down: AppleTalk: Down << Macintosh は1台もないので Protocol Down する。 TCP/IP: Up NetWare: Down << NetWare も使わない。 NetBEUI: Up << Windows パソコンからの出力に使う。Windows で NVRAM version: 2 は TCP/IP のみ使うようにすれば、なくてもいい。 AppleTalk: Mode: EtherTalk Phase 2 Net: 0xff01 Object: PC LASER NX-500 Type: LaserWriter Zone: * TCP/IP: Mode: 0 ftp: Up << ftp でプリンタにファイルを送り出力する場合。 lpr: Up rsh: Up diprint: Up telnet: Up << これ Down にすると telnet ができなくなる。 EncapType: DIX Ethernet II << inetfrm コマンドで設定する。 Nboot: ARP+PING Filter: 0x01 Address: 0xkl56980b (192.168.010.001) << プリンタのIPアドレス。 Netmask: 0xffffff00 (255.255.255.000) Broadcast: 0x00000000 (000.000.000.000) Gateway: 0xhy0bds01 (192.168.010.009) << default gateway のアドレス。 AccessCtrl: 0x00000000 (000.000.000.000) << access コマンドでアクセスでき AccessMask: 0x00000000 (000.000.000.000) << ないネットワ−ク等を設定する。 NetWare:(IPX/SPX) Mode: 0 EncapType: Auto RPRINTER number: 0 RPRINTER name: Print server name: File server name: Switch: 0x02 Pause: Disable Mode: Print server Print job timeout: 0(sec) NetBEUI: Mode: 0 Switch: 0x06 Mode: Workgroup Direct print: On Notification: Off Workgroup name: WORKGROUP Computer name: Comment: Share name[1]: NX-500 Shell mode: User mode 工場出荷時のままでいいみたい。 msh> ifconfig ↓ le0: inet 192.168.10.1 netmask 0xffffff00 broadcast 0.0.0.0 gateway 192.168.10.9 msh> access access control 0.0.0.0 access mask 0.0.0.0 msh> inetfrm TCP/IP frame type = DIX Ethernet II msh> help access change TCP/IP access control and access mask ifconfig configure network interface parameters inetfrm change TCP/IP frame type logout logout maintenance shell netstat show network status passwd change password information prnlog show print log set change NIC parameters show show NIC parameters status show printer status and print queue help show help messages (help [command]) msh> logout << これで telnet から抜ける。 Logout Maintenance Shell. [ /etc/printcap の設定と注意 ] /etc/printcap ------------------------------------------------------------------------------- |lp:lp=:rm=ricoh:rp=lp,filetype=p5:sd=/usr/spool/ricoh:lf=/usr/spool/ricoh/log: |lpt:lp=:rm=ricoh:rp=filetype=R00,filter=EUC:sd=/usr/spool/nx500: | lf=/usr/spool/nx500/log: /etc/hosts --------------------- UNIXマシンの INDY からプリントしてみ |192.168.10.1 ricoh る。NetscapeからはWWW画面を、デフォル トのプリンタ名 lp をとって、ちゃんと出力 % ftp 192.168.10.1 する。しかし、テキストを % lpr -Plpt xxx Name (192.168.10.1:katou): ricoh で出そうとすると、A4の横向きに出てしま Password: ricoh った。この RICOH のプリンタでは、 テキス ftp> ls info ト出力は RPDL エミュレ−ション・モ−ドと (Input Tray) いうので行う。rp=filetype=R00 を指定する。 No. Name Page Size Status 縦横を指定するオプションはない。どうやら ------------------------------------ プリンタのパネルで設定するしかなさそうで 1 Tray1 A4 Normal. ある。ftp アクセスして、ls info でプリン * 2 MultiTray A3R Normal. タ設定の状態が見れる。 | (5) Canon レ−ザショット用ドライバ * 線分、円、円弧をグラフィック出力するプログラム 今から15年前になるが1986年頃、 レ−ザショット・プリンタはやっと Canon から 出始めたばかりで、市販CADでもその出力に対応したのはまだなかった。当時、Apollo コンピュ−タと同時に購入したレ−ザショットは Canon LBP-8Π AJ-2 日本語対応レ−ザ ビ−ムプリンタ、約160万円、解像度は 240 DPIだった。これで何とか自社開発CAD の図面出力に使えないか検討し、作ったプログラムの原形がこれである。参考資料は、プ リンタについてきた1冊の操作説明書の中のわずかな図出力サンプルだけだった。市販で ドライバソフトが売っているということも勿論なかった。プログラムはベクタ−出力する、 ベクトル印字モ−ド VDM( Virtual Device Metafile ) と言うコマンドを使うものである。 VDM はどうも LIPS コマンドの前身のようで、当時のカタログや操作説明書をみてもLIPS という文字は見当たらない。 VDM モ−ドのコマンドのポイントは、エスケ−プ・シ−ケンスを使った命令も十分ややこ しいが、その座標値の特殊な表わし方である。操作説明書のサンプルにあった値をビット 列にした。例えば 16 は 0100 0001 0011 0000 と表わす。 このようなのを幾つも並べて 見て、全体の値のル−ルを解析したわけである。以下のプログラムでは lbp_put_valueで あり、中ではビット演算を使ったりしながら座標値を作っている。どうも、座標値作成に バグがあって線が抜けるなどの不具合が出た。さて、このプログラムで直したかどうか忘 れてしまった。しかし Apollo のユ−ザ会に PDS として出し、好評を得た。 これでそこ そこ使えたようである。その後、座標値作成部分はもう少しスマ−トに書き換えて、現在 でも自社開発CADの元、LIPS 出力で動いている。今日、LIPS 関係のフリ−ソフトや情 報はインタ−ネットに豊富にある。また参考にして頂きたい。 * プログラム プリント出力はバイナリ・デ−タを通すため、プリンタの設定を透過モ−ドにしておくこ と。プリンタの設定は PAINT=FULL にすること。LIPS は LIPS Π+、LIPS Ш などと進化 している。VDM モ−ド初期化のパラメ−タが異なったりしている。解像度も上がってきて いる。解像度の違いによって線の太さも変わってくる。その他、スケ−ルや原点位置の違 い、縦横出力の設定なども実際の出力には考慮しなければならない。それに初めの頃のレ −ザショットはA4しか出力できなかった。それが1995年頃だと思うが、A3の出力 に対応する機種も出てきた。プログラムは当初、座標値計算がA4までの対応で開発した。 その後、A3まで対応できるプログラムにした。アルファベットも日本語もベクタ−・デ −タを自前で用意して、このプログラムを基本に開発しプリントしたのだった。 #include /* 単位: 100 unit -1mm */ #define IGM "&}" /* Init Graphics Mode */ #define SGD 0x23 /* Start Graphics Draw */ #define EGD 0x25 /* End Graphics Draw */ #define IS2 0x1e /* statment END mark */ #define ESC 0x1b #define IS1 0x1f void main() { FILE *fp ; if ( (fp=fopen("lbp.dat","w"))==0 ) { fclose( fp ) ; exit(1) ; } lbp_start( fp ) ; lbp_set_origin( fp,2000,2000 ) ; lbp_set_line_width( fp,2 ) ; lbp_set_line_type( fp,0 ) ; lbp_draw_circle( fp,5000,5000,7000 ) ; lbp_draw_line( fp,0,0,20000,0 ) ; lbp_end( fp ) ; fclose( fp ) ; /* system( "prf lbp.out -transparent" ) ; Apollo での透過モ−ドのプリント */ } lbp_start( FILE* fp ) { fprintf( fp,"%c%c",ESC,'c' ) ; /* ハ−ド初期化 */ fprintf( fp,"%c%c%s",ESC,'[',"1p" ) ; /* 縦長出力 */ fprintf( fp,"%c%c%s",ESC,'[',IGM ) ; /* グラフィックス初期化 */ fprintf( fp,"%c%c",SGD,IS2 ) ; /* グラフィックス開始 */ fprintf( fp,"%c%c%c%c%c",0x21,0x30,0x22,0x31,IS2 ) ; /* 座標系のスケ−ル */ fprintf( fp,"%c%c",0x24,IS2 ) ; /* 描画開始 */ } lbp_end( FILE *fp ) { fprintf( fp,"%c%c",EGD,IS2 ) ; /* graphics mode end */ fprintf( fp,"%c%c%c",0x7d,0x70,IS2 ) ; /* return to text mode */ fprintf( fp,"%c%c",0x0f,0x0c ) ; /* paper send out code */ } lbp_set_origin( FILE *fp,int ox,int oy ) /* 描画原点 */ { fprintf( fp,"%c%c",0x7d,0x22 ) ; lbp_put_value( fp,ox ) ; lbp_put_value( fp,oy ) ; fprintf( fp,"%c",IS2 ) ; } lbp_draw_line( FILE *fp,int sx,int sy,int ex,int ey ) { fprintf( fp,"%c",0x31 ) ; /* 線分の識別番号 */ lbp_put_value( fp,sx ) ; lbp_put_value( fp,sy ) ; /* 始点 */ lbp_put_value( fp,ex-sx ) ; lbp_put_value( fp,ey-sy ) ; /* 終点 */ fprintf( fp,"%c",IS2 ) ; /* 描画の終了記号 */ } lbp_draw_circle( FILE *fp,int cx,int cy,int r ) { fprintf( fp,"%c",0x35 ) ; /* 円の識別番号 */ lbp_put_value( fp,cx ) ; lbp_put_value( fp,cy ) ; lbp_put_value( fp,r ) ; fprintf( fp,"%c",IS2 ) ; } lbp_draw_fill_circle( FILE *fp,int cx,int cy,int r ) { fprintf( fp,"%c%c%c",0x49,'1',IS2 ) ; fprintf( fp,"%c",0x35 ) ; lbp_put_value( fp,cx ) ; lbp_put_value( fp,cy ) ; lbp_put_value( fp,r ) ; fprintf( fp,"%c",IS2 ) ; fprintf( fp,"%c%c%c",0x49,'0',IS2 ) ; } lbp_draw_arc( fp,cx,cy,r,sdeg,cdeg ) FILE *fp ; int cx,cy,r,sdeg,cdeg ; /* IN : sdeg 開始角度, cdeg 中心角度 */ { fprintf( fp,"%c%c",0x7d,0x36 ) ; fprintf( fp,"%c",0x30 ) ; /* 円弧の識別番号 */ lbp_put_value( fp,cx ) ; lbp_put_value( fp,cy ) ; lbp_put_value( fp,r ) ; lbp_put_value( fp,sdeg ); lbp_put_value( fp,cdeg ) ; fprintf( fp,"%c",IS2 ) ; } lbp_set_line_width( FILE *fp,int type ) /* 線の太さ */ { fprintf( fp,"%c%c",0x46,0x31 ) ; if ( type == 1 ) fprintf( fp,"%c",0x21 ) ; /* 細線 0.1 mm,DEFAULT */ else if ( type == 2 ) fprintf( fp,"%c",0x22 ) ; /* 中細線 0.2 mm */ else if ( type == 3 ) fprintf( fp,"%c",0x23 ) ; /* 中太線 0.4 mm */ else if ( type == 4 ) fprintf( fp,"%c",0x24 ) ; /* 太線 1.0 mm */ fprintf( fp,"%c",IS2 ) ; } lbp_set_line_type( FILE *fp,int type ) /* 線のタイプ */ { fprintf( fp,"%c%c",0x45,0x31 ) ; if ( type == 0 ) fprintf( fp,"%c",0x30 ) ; /* 実線,DEFAULT */ else if ( type == 1 ) fprintf( fp,"%c",0x31 ) ; /* 大きい点線 */ else if ( type == 2 ) fprintf( fp,"%c",0x32 ) ; /* 大きいドット */ else if ( type == 3 ) fprintf( fp,"%c",0x33 ) ; /* 一点鎖線 */ else if ( type == 4 ) fprintf( fp,"%c",0x34 ) ; /* 二点鎖線 */ else if ( type == -1) fprintf( fp,"%c",0x21 ) ; /* 普通の点線 */ else if ( type == -2) fprintf( fp,"%c",0x22 ) ; /* 普通のドット */ fprintf( fp,"%c",IS2 ) ; } lbp_put_value( FILE *fp,int iv ) /* -32639 <= iv <= 32639 */ { static char base[16] = { 0x00,0x01,0x02,0x03, 0x04,0x05,0x06,0x07, 0x08,0x09,0x0a,0x0b, 0x0c,0x0d,0x0e,0x0f } ; static char B2F = 0x40 ; static char C2F = 0x40 ; static char C2M = 0x50 ; /* iv >= 16384 */ char a,b,c,A2 ; /* A2 value sign use */ int a1,b1,b2,c1,m,n,tv ; if ( iv < 0 ) { /* set value sign */ A2 = 0x20 ; tv = -iv ; } else { A2 = 0x30 ; tv = iv ; } if ( tv <= 15 ) { /* set bit array */ a = A2|base[tv] ; fprintf( fp,"%c",a ) ; } else if ( (tv>=16)&&(tv<=255) ) { a1 = tv % 16 ; b1 = (tv-a1)/16 ; a = A2|base[a1] ; b = B2F|base[b1] ; fprintf( fp,"%c%c",b,a ) ; } else if ( (tv>=256)&&(tv<=1023) ) { m = tv % 256 ; b2 = (tv-m)/256 ; a1 = m % 16 ; b1 = (m-a1)/16 ; a = A2|base[a1] ; b = B2F|base[b2]<<4|base[b1] ; fprintf( fp,"%c%c",b,a ) ; } else if ( (tv>=1024)&&(tv<=16383) ) { n = tv % 1024 ; c1 = (tv-n)/1024 ; m = n % 256 ; b2 = (n-m)/256 ; a1 = m % 16 ; b1 = (m-a1)/16 ; a = A2|base[a1] ; b = B2F|base[b2]<<4|base[b1] ; c = C2F|base[c1]; fprintf( fp,"%c%c%c",c,b,a ) ; } else if ( (tv>=16384)&&(tv<=32639) ) { tv = tv - 16384 ; n = tv % 1024 ; c1 = (tv-n)/1024 ; m = n % 256 ; b2 = (n-m)/256 ; a1 = m % 16 ; b1 = (m-a1)/16 ; a = A2|base[a1] ; b = B2F|base[b2]<<4|base[b1] ; c = C2M|base[c1]; fprintf( fp,"%c%c%c",c,b,a ) ; } } lbp_put_value2( FILE *fp,int iv ) /* -32639 <= iv <= 32639 */ { int SIGN, n1; /* こっちは値計算の改良版 */ char b1,b2,b3,b4; /* A3サイズにも対応する */ int t1,t2,t3,t4; /* Check (+) or (-) */ if( iv >= 0 ) SIGN = 0x30; /* PLUS */ else SIGN = 0x20; /* MINUS */ n1 = abs( iv ); if( n1 <= 15 ){ b1 = SIGN|(char)n1; fprintf( fp, "%c", b1 ); } else if( n1 <= 1023 ) { t1 = n1%16; t2 = (n1-t1)/16; b1 = SIGN|(char)t1; b2 = 0x40|(char)t2; fprintf( fp, "%c%c", b2,b1 ); } else if( n1 <= 65535 ) { t3 = n1/1024; t1 = n1%16; t2 = (n1%1024)/16; /* ( n1 - t3*1024 - t1 )/16; */ b1 = SIGN|(char)t1; b2 = 0x40|(char)t2; b3 = 0x40|(char)t3; fprintf( fp, "%c%c%c", b3,b2,b1 ); } else if( n1 <= 4194303 ) { t4 = n1/65536; t3 = (n1%65536)/1024; t2 = (n1%1024)/16; t1 = n1%16; b1 = SIGN|(char)t1; b2 = 0x40|(char)t2; b3 = 0x40|(char)t3; b4 = 0x40|(char)t4; fprintf( fp, "%c%c%c%c", b4,b3,b2,b1 ); } else { /* printf(" lbp_put_value : 計算不能\n" ); */ } } 参考:実際に自社開発のCADの中で使ったル−チン circle_to_line(cx,cy,r,x,y) /* 円を線に分割する */ float *cx,*cy,*r ; float x[361],y[361] ; { int i ; double c1,s1,deg ; deg = 2.0 * 3.14159265 / ( 360.0 - 1.0 ) ; c1 = cos(deg) ; s1 = sin(deg) ; x[0] = *cx + *r ; y[0] = *cy ; for(i=1; i<359; i++){ x[i] = *cx + (x[i-1] - *cx) * c1 - (y[i-1] - *cy) * s1 ; y[i] = *cy + (x[i-1] - *cx) * s1 + (y[i-1] - *cy) * c1 ; } x[359] = x[0] ; y[359] = y[0] ; } ------------------------------------------------------------------------------------ [ 付録 ] Apollo のコマンドでプリントとダンプ $ catf lbp.data | prf -pr l -transparent Streams file queued to printer l C言語の本に載っていたダンプコマンドのソ−スプログラムを元に作ってみた。適当に線 分や円を出すように、プログラムで書いて lbp.dat ファイルを作った。 $ dump lbp.data 0000: 1b 63 1b 5b 31 70 1b 5b 26 7d 23 1e 21 30 22 31 ,c,[1p,[&}#,!0"1 0010: 1e 24 1e 7d 22 5f 24 65 28 1e 7d 44 31 2a 3c 1e ,$,}"_$e(,}D1*<, 0020: ff ff ff ff ff 00 ff 00 ff ff ff ff 46 31 22 1e ,,,,,,,,,,,,F1", 0030: 45 31 30 1e 31 52 7c 38 46 6c 32 30 48 75 3a 1e E10,1R|8Fl20Hu:, 0040: 45 31 30 1e 31 4f 58 36 46 7b 3c 30 48 6f 36 1e E10,1OX6F{<0Ho6, 0050: 45 31 30 1e 31 4d 45 38 46 5c 38 30 4a 43 3c 1e E10,1ME8F\80JC<, 0060: 45 31 30 1e 31 54 70 32 47 6a 3a 4c 56 2a 30 1e E10,1Tp2Gj:LV*0, 0070: 45 31 30 1e 31 55 4c 34 4c 4d 34 4b 4b 2a 30 1e E10,1UL4LM4KK*0, 0080: 46 31 21 1e 25 1e 7d 70 1e 0f 0c F1!,%,}p,,,