●GNU ghostscript7.05 for MacOSX 10.2による印刷方法●



2002年9月25日作成
2002年10月25日修正・補訂
2002年12月17日追記


はじめに

 MacOSXは正式対応しているプリンタが少ないため、これまで使ってきたものが急に使えなくなるという問題を抱えている。よって印刷のためだけにClassic環境を立ち上げたり、OS9で再起動するというユーザーも少なくないことだろう。このような状況は最近、メーカーによる公式ドライバのリリースや、数多くの非対応プリンタをドライブできるようにするGimpPrintの登場により、インクジェット・プリンタについては若干改善がみられてきたものの、CanonやEPSONといった日本で大きなシェアを有するメーカー製のレーザー・プリンタの多くが、そのままでは使えないことに変わりはない。そこでここでは、UNIX系OSではお馴染みの、ghostscript経由でプリンタをドライブするという方法を、MacOSX 10.2の環境で極力容易に利用できるよう調整した、本gsパッケージの使用方法について説明しておく。
EPSON製レーザー・プリンタに関しては、先日、米EPSONサイトにて公開された汎用ドライバにより、多くの機種がドライブ可能となったようである。このドライバは日本語化もなされており、EPSONユーザーにとって試す価値は十分にあろう。ただしAcrobatReaderからでのPDFの印刷だけは、gs経由による印刷のほうが高品位であるという。また、ESC/pageを制御言語とする旧機種群、具体的にはLP-800,1000,1500,1500ART,1500S,1600,1700,1700S,1800,LP-2000,2000LT,3000,5000,7000,7000E,7000G LP-8000,8000S,8000SE,8000SX,LP-8200,8300,8300S,8400,8500,9000,9200,9200S,9200SXについては、EPSONの対応状況ページにて、「OSX非対応」すなわち、メーカーとしてドライバを準備する予定はないことが明言された。よってこれらの機種に関しては、gsでescpage用PPDを用いる以外の利用方法は閉ざされたことになろう。一方、Canonのほうは2002年10月に、日本語版公式ドライバがリリースされたが、こちらのほうは純正ネットワーク・ポート経由、あるいはプリンタ内蔵USBポート経由での印刷しかサポートされていない(NetHawk-USB10の如き関連会社製USB−パラレル変換ケーブルも使用不可能)様子であり、数多く並べたてられた「対応機種」に比し、その実態たるやお寒い限りであった。だがようやく新潟キャノテック製のドライバがリリースされたことにより、この状況も改善をみた。ただし一連のドライバが対応しているのはLIPS-IVプリンタのみであり、CanonがLIPS-IIIプリンタを切り捨てつつあるのは日を追って明らかになりつつある。また、印刷品位や速度についても、私自身が検証した限りでは、必ずしもメーカー製ドライバがgsより優れているというものでもないようであるため、今暫くは本パッケージの活躍の場も残されているといえるだろう。

1 gs経由での印刷の仕組み

 MacOSXでは通常、印刷に際し、アプリケーションからプリントセンターにデータが渡される過程でシステム内部でPSあるいはPDFに変換された後に、さらにプリントセンターからプリンタ・ドライバにデータが渡されて印刷出力がなされる。プリンタはそれぞれに独自の印刷用言語を使っているため、その翻訳のためのドライバがない場合、使用不可能になるというわけだ。ところが、10.2からはプリンタ・ドライバとして、CUPS(Common UNIX Printing System)が呼び出せるようになったため、正式にドライバがリリースされていない機種でも、プリントセンター経由、すなわちアプリケーションの「プリント」メニューから普通に印刷可能になる。つまり渡されたPS/PDFデータを、CUPSが制御言語に翻訳したうえでプリンタに渡してやれれば、印刷が実現できるのである。ただしCUPS自身は基本的には翻訳機構をもたないので、そのための外部プログラムを呼び出すことになる。GimpPrintもそういったプログラムの一種であるが、前述の如くこれはCanon・EPSONのレーザー・プリンタへの対応が十分ではないため、ここではghostscriptを利用することになる。
 ghostscriptは、PostScriptおよび、乱暴にいえばその一方言であるPDFを理解し、それを別の形式に変換することができる。この変換機能を担うものは一般にデバイスドライバと呼ばれるが、そのなかにはCanonのレーザー・プリンタで用いられているLIPSなどの、プリンタ制御言語への変換が可能なものが含まれている。つまり基本的には、ghostscriptに含まれるデバイスドライバのなかに、自分のプリンタに対応するものがあれば、gsを経由した印刷が可能であるということができる。以下に本パッケージのgsに含まれるデバイスドライバを列挙しておこう。
bbox bff bit bitcmyk bitrgb bmp16 bmp16m bmp256 bmp32b bmpa16 bmpa16m bmpa256 bmpa32b bmpamono bmpasep1 bmpasep8 bmpgray bmpmono bmpsep bmpsep8 ccr cfax cgm24 cgm8 cgmmono cif dfaxhigh dfaxlow epswrite faxg3 faxg32d faxg4 inferno jpeg jpeggray mag16 mag256 mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 pbm pbmraw pcx16 pcx24b pcx256 pcx2up pcxcmyk pcxgray pcxmono pdfwrite pgm pgmraw pgnm pgnmraw pkm pkmraw pksm pksmraw plan9bm png16 png16m png256 pnggray pngmono pnm pnmraw ppm ppmraw psgray psmono psrgb pswrite sgirgb sunhmono sxlcrt tiff12nc tiff24nc tiffcrle tiffg3 tiffg32d tiffg4 tifflzw tiffpack alc2000 alc4000 alc8500 alc8600 ap3250 appledmp atx23 atx24 atx38 bj10e bj10v bj10vh bj200 bjc600 bjc800 bjc880j bjccmyk bjccolor bjcgray bjcmono cdeskjet cdj1600 cdj500 cdj550 cdj670 cdj850 cdj880 cdj890 cdj970 cdjcolor cdjmono chp2200 cljet5 cljet5c cljet5pr coslw2p coslwxl cp50 declj250 deskjet dj505j djet500 djet500c djet820c dl2100 dmprt dnj650c epl2050 epl2050p epl2120 epl5800 epl5900 epl6100 eps9high eps9mid epson epsonc escp escpage escpc fmlbp fmpr fs600 gdi hl1240 hl1250 hl7x0 hpdj1120c hpdj310 hpdj320 hpdj340 hpdj400 hpdj500 hpdj500c hpdj510 hpdj520 hpdj540 hpdj550c hpdj560c hpdj600 hpdj660c hpdj670c hpdj680c hpdj690c hpdj850c hpdj855c hpdj870c hpdj890c hpdjplus hpdjportable ibmpro imagen iwhi iwlo iwlq jetp3852 jj100 la50 la70 la75 la75plus laserjet lbp310 lbp320 lbp8 lex2050 lex3200 lex5700 lex7000 lips2p lips3 lips4 lips4v lj250 lj3100sw lj4dith lj4dithp lj5gray lj5mono ljet2p ljet3 ljet3d ljet4 ljet4d ljet4pjl ljetplus ln03 lp1800 lp1900 lp2000 lp2200 lp2563 lp3000c lp7700 lp8000 lp8000c lp8100 lp8200c lp8300c lp8300f lp8400f lp8500c lp8600 lp8600f lp8700 lp8800c lp8900 lp9300 lp9400 lp9600 lp9600s lq850 lx5000 lxm3200 lxm5700m m8510 md1xMono md2k md50Eco md50Mono md5k mj500c mj6000c mj700v2c mj8000c ml600 necp6 npdl oce9050 oki182 oki4w okiibm paintjet pcl3 photoex picty180 pj pjetxl pjxl pjxl300 pr1000 pr1000_4 pr150 pr201 pxlcolor pxlmono r4081 rpdl samsunggdi sj48 st800 stcolor t4693d2 t4693d4 t4693d8 tek4696 uniprint xes cups ijs nullpage
 さて、プリントセンターからデータを受け取るとCUPSは、プリンタごとに設定されたPPDファイルに即して処理を開始する。このPPDファイル中には用紙サイズや解像度などの印刷に必要な情報や、ghostscriptに受け渡すべき処理内容が記述されており、ghostscriptによって各プリンタの制御言語に翻訳されたデータをプリンタに渡して印刷が行われることになる。このCUPS-ghostscript用PPDファイルはLinuxPrintingOrgのサイトから入手可能であり、本パッケージにははじめから、Canon・EPSON等のプリンタ用のPPDが20種程含まれている。各プリンタへの対応状況や使用可能な解像度等といった、より詳細な仕様に関しては、これらのPPDが呼び出すデバイスドライバの作者、大森紀人氏のページや、エプソンコーワ社のページに示されているので参照していただきたい。

2 プリンタの登録

 さて、上記の如きCUPS経由での印刷機能を実現するには、何はともあれプリンタの登録を済まさねばならない。そのためのCUPSの設定はコマンド・ラインで実行されるのがその実体だが、それでは煩わしいので、CUPSはプリンタを登録し解像度等の設定を行うためのweb形式インターフェイスを備えており、これはブラウザにそのURL、http://localhost:631/を打ち込んでやれば立ち上がる。しかしもっと簡便に、通常の場合とさして変わらぬ方法でプリントセンターからも登録は可能だ。プリントセンターを起動させ新たなプリンタを登録する際には通常、「プリンタリスト」ウィンドウの「追加」ボタンをクリックするが、これを"option"キーを押しながら実行することで、登録のために現れるサブ・パネルのプルダウン・メニュー最下に、普段は現れない「詳細」という項目が表示される。この「詳細」を選んだときに表示されるのが、CUPS設定に相当するインターフェイスである。まずはそのパネルの上部にある「装置」というプルダウン・メニューをみてみよう。もしプリンタがUSB等でローカル接続されているか、AppleTalkでネットワーク接続されていて、それがシステムに物理的に認識されていれば、メニュー最下段にそのプリンタ名が現れているはずだ。その場合には、そのプリンタを選んで次に進めばよい。ただしプリンタは接続してすぐに認識されてくれるとは限らないので、メニューに現れていなくともそこで諦めてしまわず、USBプリンタであれば電源オンの状態で接続したままMac本体を再起動し、あらためて挑戦してみるのがよいだろう。また、使いたいプリンタがTCP/IPネットワーク接続されているならば、"LPD/LPR Host or Printer"を選び、次に進むことになる。
CUPS CUPS
 次にネットワーク・プリンタの場合には、「装置名」に任意の名前を入力するとともに、「装置のURI」を設定せねばならない。これはTCP/IP接続の場合には"lpd://装置のIPアドレス/プリント・キュー"である。なお、自動認識されていたプリンタの場合には、「装置名」「装置のURI」ともに自動設定されているので、この作業は必要ない。
 そして最後に、CUPSが用いる前述のPPDファイルを指定してやらねばならない。まず「プリンタの機種」からメーカー名を選ぶと、下欄にPPDの一覧が表示される。そこで適当なものを選んでやれば、これで設定終了である。たとえば私の場合、Canon LBP850を使用しており、この機種は制御言語としてLIPS-IVを用いるので、「プリンタの機種」から「Canon」を選び、さらに「LIPS-IV」を選んで設定終了となる。なおPPDファイルは登録後もプリントセンターで「プリントリスト」から当該プリンタを選び、「プリンタ」メニュー→「情報を見る」で表示される「プリンタ情報」パネルのプルダウン・メニューから変更可能であるので、自分のプリンタに適したPPDファイルを探すために試行錯誤を経る必要がある場合も、いちいち登録からやり直す必要はない。ただしCUPSは選択されたPPDを別の場所にコピーし、そのコピーのほうを読み出して印刷を行うため、たとえばPPDの記述内容に変更を加えた場合には、再度同じPPDの選択をし直さないと変更が反映されない。また選択し直したはずなのに以前のものと同一のPPDと判断されて、やはり変更が反映されない場合もある。その場合には、別の任意のPPDを一度選択・設定し直した後、あらためて目的のPPDを選択・設定すればよい。また、2002年10月25日版のPPDファイル以降、同プルダウン・メニューの「インストールされるオプション」より、プリンタ・メモリのサイズ設定が可能になった。使用するプリンタの搭載メモリ量に応じた設定を行うことで、印刷速度等動作がより適正なものとなることが期待される。
 なお、TCP/IP接続されたプリンタの場合、「詳細」メニューを用いずとも、通常の「IPプリント」を選び、IPアドレスを入力することでも多くの場合登録が可能である。この場合、キューは「サーバ上のデフォルトのキューを使う」にチェックを入れたままでよく、特に自分で入力する必要はない。そしてその上で「プリンタの機種」で、PPDを選択するのは上記の場合と同様である。

4 対応するPPDがない・わからない場合

 使いたいプリンタに対応したPPDが本パッケージに含まれていない場合、そのPPDで呼び出されるgsのデバイスドライバが本パッケージのgsが対応しているものであれば、前述の如く別途LinuxPrintingOrgからPPDを入手することで利用可能になる。その場合はPPDファイルをハードディスク上の任意の場所においておき、上述の「プリンタの機種」選択の際にプルダウン・メニューから「その他...」を選んでやれば、ファイル選択パネルが立ち上がるので、そこで先程のPPDファイルを選択・指定してやればよい。
 しかしながらPPDファイル(換言すれば、gsのデバイスドライバ)は、別のメーカー製プリンタ用のものが、実は使えるなどということがあり、いったい自分のプリンタでは何を使うべきなのか、判断に迷うことが多い。そこでLinuxPrintingOrgのプリンタ・データベースを活用させてもらおう。そのメニューからメーカーと機種名を選び検索すると、いくつかの対応ドライバ候補が表示されるので、そのなかの"Type:ghostscript"となっているもののうちから、本gsパッケージが対応しているデバイスドライバを選び、デバイス名をクリックすると、PPD等種々の対応ファイルを自動生成してくれるページへと飛ぶことができる。そこでこのページのファイル生成用リスト中最上段の"Generate PPD file"ボタンを押せば、ブラウザに、生成されたPPDファイルが表示されるので、これをテキストとして保存し、miなどの改行コードを変更できるエディタで開いて改行コードがLFになっていることを確認した上で、その先頭の方に「You may save this file as 'xxx.ppd' 」の如く表示されているファイル名をつけてやればよい。
 なお、ここで生成されるPPDファイルは英語圏での使用を想定しているため、B5・B4等の用紙サイズ定義を欠いているものがほとんどであり、実用上は不便である。これは他の用紙サイズ定義の書式を参考に、必要な用紙定義を書き加えてやれば、あっさりと使用可能になる。ただし記述ミスをするとPPDファイル自体が使い物にならなくなる危険もあるので、改変は慎重に行う必要があろう。本パッケージに含まれるPPDは既に改変を行ったものであり、使用可能な用紙サイズの追加とともに、機種ごとの機能に応じて印刷時のパネルから両面印刷・解像度・用紙種等・グレイスケール/カラー等の設定変更が可能なものになっている。なお、ユーザーの方々の数多くのご助力抜きには、PPDへのこのような機能の実装は実現できなかった。この場を借りて厚く御礼申し上げたい。
PPD改良の過程であるユーザーの方(氏名非公表)から寄せていただいたPPDのサンプルをここに置かせていただく。これは以前のものにみられたAcrobatReader等Adobe系アプリケーションにおける印刷の不具合・印刷パネル表示の不具合を解消した改良版であり、2002年10月25日版以降のPPDは、このサンプルに依拠して作成されている。なお、CUPS用のものではないが、PPD記述の参考になるものとして、/usr/local/share/ghostscript/7.05/lib以下にインストールされている幾つかのPPDや、井上浩一氏のページに置かれているgs用PPDなどがあるので、PPDファイルを自分で作成する際には適宜参照されたい。

4 AcrobatReader等での若干の不具合について

 以前のパッケージではAcrobatReaderからのPDF印刷/「出力オプション」機能によるPSファイルへの変換ができないという不具合があったが、これはPPDの記述を、より適切なものに改良することにより基本的には克服された。ただしまだ、和文フォントが埋め込まれた、特に縦組PDFの場合などで印刷結果にメトリックの乱れが生じるという不具合は解消されないままである。しかしこれはCUPS-gsによる印刷の仕様上、避けられない問題と思われる。CUPSのプリンタ・ドライバはCarbonアプリではPDFではなくPSのコードを吐き出してプリントセンターに送るため、gsがそれを一旦PDFコードに変換した後にCUPSに渡される。よってAcrobatReaderの場合、PDFをAcrobatReader自身がPSにして吐き出したものを、わざわざgsがPDFに再変換してCUPSに渡すという、面倒なことをしていることになる。ところが、PSをPDFに変換するpdfwriteというデバイスドライバは、gsのデバイスドライバのなかでは比較的新しく、まだ不安定なところがあり、特に日本語フォント・縦組の扱いには問題を生じやすいのである。
 よってこれを回避するには、(1)まずAcrobatReaderからの印刷時、プリントパネルの"AcrobatReader"で「画像としてプリント」を選ぶ、という方法がある。これは文字もフォントとしてではなくビットマップの画像データとして処理されるため、上述の不具合を回避できるのであるが、その分場合によっては印刷品位が落ちることになり、また印刷に時間もかかるため、ページ数の多い書類の印刷には不向きである。次に(2)プリントセンターのジョブウィンドウにPDFファイルをドラッグ&ドロップするという方法がある。これはCUPSに直接PDFのデータが送り込まれるために不具合を回避できるのだが、用紙サイズ・方向等の設定が必ずしも正しく反映されないという問題が残っているため、印刷に際してはCUPSのwebインターフェイス等でいちいちデフォルト用紙の設定を切り替えてやらねばならないという煩わしさがある。最後に(3)OS標準のプレビューで開いて印刷するという方法だが、これはプレビューがCocoaアプリケーションであるために、CUPSに直接PDFデータが送り込まれることによって不具合が解消されるのだと思われる。しかしプレビューには逆に、和文フォントが埋め込まれていないPDFの場合、明朝がOS内蔵の明朝に置き換えられて表示・印刷されるべきところを、ゴシックになってしまうというバグがある。また、プレビューによる印刷・ジョブウィンドウへのドラッグ&ドロップともに、OSXが10.2.2にアップデートされてから、以前にも増して処理が重くなったようであり、機種によってはマシン・パワー不足で実用にならないかもしれない。よって個々のPDFの特性に応じて、AcrobatReaderからの通常印刷も含め、適宜上述の各方法を使い分けるのが穏当だろう。

おわりに

 ところで、ここでの方法は、シリアル/パラレル・ポートしかないため、そもそも最近の機種には物理的に接続できない旧型プリンタを、インクジェット・レーザーを問わず復活させるためにも利用できる。最近はパラレル・ポートに接続するタイプの安手のプリント・サーバが実勢価格10,000円弱程度で手に入るので、これを利用して旧型プリンタをネットワーク・プリンタに仕立て、IPアドレスを振ってやったうえで上記の如き設定をしてやればよい。私の場合、研究室のCanon LBP850を、新潟キャノテック製NetHawk-USB10によるUSB←→パラレル接続、BUFFALO製プリント・サーバLPV2-TX1によるTCP/IP接続の双方で動作させることに成功している。ただし大方のプリント・サーバは、初期設定のためのユーティリティにMacで動作するものがないという問題を抱えている。その際はWindows搭載機・VirtualPCなどから初期設定を行わざるを得ないが、製品によってはUNIXコマンド・ライン上からの設定方法が記載されていることもあるので、場合によってはOSXでもターミナルからなら設定ができるだろう。

【追記】

 最近、使用方法についてのメールでのお問い合わせをいただくことが多くなっている。そういったものには可能な限りお答えしていくつもりではあるが、なかにはあまりに情報がとぼしいため、回答不能なこともある。そこで最低限、gs/PPDパッケージの版・使用しているプリンタのメーカー/機種名・プリンタとの接続方法・使用したPPD・どの段階でどういった不具合が生じているか(たとえば、「CUPSのwebインターフェイスからのテストページ印刷はできるが、アプリケーションからの印刷は不可能」など)、は明記していただきたい。また、使用を試みるに際しては、マニュアル等でプリンタの仕様を十分確認していただきたい。たとえばCanonのCAPTやEPSONのESC/PageS(ESC/Pageとは別のもの)といった特殊な制御言語は、ghostscriptでは対応不可能であるため、それらの制御言語だけしか搭載していない機種の場合、どう設定しようとも本パッケージでは対応不可能である。ご注意いただきたい。

【2002年11月12日補足】

 MacOSX 10.2.2アップデートではプリントセンター回りにも変更が加えられたが、それにともない本パッケージを利用して設定したプリンタを用いアプリケーションから印刷しようとすると、アプリケーションが異常終了するという不具合が発生している。これは本パッケージにて手を入れたCUPS-gs用PPDの給排紙手動選択機能に関する記述と新プリントセンターとの間の不整合によるものであることが判明した。そこで当該記述を改良し、OSX 10.2.2に対応させた上書き用の新PPDパッケージおよび、それと同等のPPDを含んでパッケージングし直した新しいgsパッケージを用意したので、必要な方は別途ダウンロードし、インストールしていただきたい。ただし新記述方法による給紙手動選択機能は、とりあえず「OSX 10.2.2でも落ちない」というものであり、実際の機能を十分検証できているものではないので、もしきちんと機能しないようであれば、プリンタ側の給紙選択設定で機能を補いつつ利用していただきたい。
キャノテック製ドライバとの比較、他




Back to INDEX