印刷処理の考え方

移動先: 案内, 検索


一般的な印刷データの形式

PostScript: 従来の印刷データ形式

Linux では印刷を処理するにあたって、従来は汎用的なデータ形式である PostScript 形式を使用していました。言い換えると、アプリケーションプログラムは一般に、印刷時に PostScript 形式での出力を行なっていた、ということになります。

プリンタによっては PostScript 形式をネイティブに (直接的に) 受け入れることができます。つまり、 PostScript 形式の出力から、直接印刷処理を実施できるプリンタが存在する、ということです。それ以外のプリンタの場合は、 Ghostscript とプリンタドライバを併用して、 PostScript 形式をプリンタ側で理解できる "言語" に変換する必要があります。

さらに詳しい情報は、下記にあります:

PDF: 新しい印刷データ形式

印刷データ形式の新しい規格となるべく、従来の PostScript 形式を PDF 形式に置き換える取り組みも行なわれています。これは Linux Foundation の OpenPrinting ワーキンググループと、 CUPS の作者が支援している取り組みです。

http://www.linuxfoundation.org/collaborate/workgroups/openprinting には、下記のような記述があります (翻訳):

CUPS 1.6.x では PDF が標準の印刷ジョブ形式になりました。

すべての主要なデスクトップアプリケーション (GTK/GNOME, Qt/KDE, LibreOffice/OpenOffice.org, Firefox, Thunderbird, ...) では、印刷ジョブを PostScript 形式ではなく、 PDF 形式で送信するようになっています。それに加えて、 CUPS フィルタチェインを完備したことにより、印刷ジョブを PDF 形式に変換する機能も利用できるようになりました。

CUPS の作者である Mike Sweet(Apple Inc.) 氏は、アップストリームの CUPS ソースコードには Linux 固有の CUPS フィルタを含めないようにすることを決定し、我々も OpenPrinting でメンテナンスすることに合意しました。 PostScript をメインにしていた時代から PDF をメインにする時代になることによって、いくつか不要となるコードやフィルタを削除して整理することができました。これにより、 Linux における CUPS のアップストリーム標準は、 CUPS 自身に加えて cups-filters パッケージを利用することで、 PDF ベースのジョブ処理に生まれ変わりました。これはつまり、 PDF 以外の形式を印刷する場合、まず PDF 形式に変換してから、 pdftopdf フィルタや Ghostscript などでページの管理オプションなどを調整して処理することになります。

入力データが PostScript 形式であり、かつプリンタが PostScript プリンタであった場合や、プリンタドライバが PostScript を必要とする場合にのみ、例外となります。 PostScript を PDF に変換し、再度 PostScript に変換するようなことはせず、従来通り pstops フィルタを通して PostScript をそのまま渡します。

このような処理形態になったことから、非 PostScript プリンタに対するドライバを開発されているすべての開発者は、 PostScript 形式だけを期待するような PPD やドライバを開発しないようにお願いしています。 PPD ファイルは、少なくとも PDF 形式または CUPS Raster 形式を受け入れるようにしてください。詳しくはドライバ設計、もしくはパッケージングのページをお読みください。

PDF における印刷ワークフローについて、詳しくは http://www.linuxfoundation.org/collaborate/workgroups/openprinting/pdf_as_standard_print_job_format と cups-filters のページ https://www.linuxfoundation.org/collaborate/workgroups/openprinting/cups-filters をお読みください。

PDF が標準の印刷ジョブ形式となったことにより、従来の PostScript 対応プリンタは印刷データを直接受信して印刷することができなくなります。つまり、 PDF から PostScript に変換する印刷ワークフローを追加する必要があることになります。もちろん、 PostScript と PDF の両方に対応したプリンタもあります。

PPD files: プリンタ固有のオプション

PostScript Printer Description (PPD) ファイルには、プリンタ固有の値とオプションの一覧が含まれているほか、下記のような設定に関する選択肢を提供しています:

  • 用紙サイズ: A4, レターサイズ, リーガルサイズなど
  • 給紙スロット: デフォルト, トレイ, 手差しなど
  • 印刷解像度: 300x300dpi, 600x600dpi

アプリケーションプログラムは、 PPD ファイルを利用してプリンタ固有のオプションをダイアログ内に表示するほか、アプリケーションが印刷にあたって PostScript や PDF で出力する際、下記のようなプリンタ固有値を取得します:

  • モノクロ対応またはカラー対応のプリンタ
  • 各用紙サイズにおける印刷可能範囲の値

プリンタの設定ツール (たとえば YaST プリンタモジュール など) では、 PPD ファイルから下記のような値を読み込んで、プリンタの型式を一覧表示します:

  • プリンタの製造元
  • 型式名

PostScript プリンタの場合、製造元は型式ごとに PPD ファイルを提供します。

その他のプリンタ (つまり非 PostScript プリンタ) の場合、プリンタドライバのソフトウエアパッケージには、サポート対象の各プリンタの型式に対応した PPD ファイルが含まれます。また、非 PostScript のプリンタの場合、 PPD ファイルには使用すべきプリンタドライバプログラムに関する情報と、それぞれのドライバで利用可能なプリンタ固有オプションが記述されています。

さらに詳しく知るには、下記をお読みください:

CUPS: ユーザとプリンタとの間を結ぶサーバ

Common Unix Printing System (CUPS) は Apple Inc. が開発している印刷システムです。 Mac OS X をはじめ、さまざまな UNIX 系オペレーティングシステムのほか、 Linux でも動作します。

プリンタデバイスはユーザアプリケーションから直接使用することなく、印刷キューを介して間接的に使用します。

様々なアプリケーションプログラムが同時に印刷ジョブを送信すると、これらのジョブはキュー内に貯められ、プリンタデバイスに対しては 1 つずつ順に送信していきます。 1 人のユーザが 1 つのアプリケーションプログラムを利用して 1 つの印刷ジョブを送信した場合でも、印刷キューはジョブを保留の状態にし、アプリケーションプログラムはそのまま動作し続けることができるようになっています。これにより、プリンタデバイスが印刷を完了するまで待たされる、といったことがないようになっています。

CUPS はコンピュータ内で動作していなければならないソフトウエアです。このソフトウエアが動作していることで、アプリケーションプログラムは印刷出力を CUPS に送信し、その印刷ジョブをキューに貯め、 1 つずつ処理することができるようになっています。

それぞれの印刷キューに対して、 CUPS がアプリケーションプログラムに情報を提供するための PPD ファイルを用意します。これにより、プリンタ固有のオプションを印刷ダイアログに表示することができるようになります。

なお、非 PostScript プリンタの場合は、 CUPS はプリンタドライバを実行して、その結果をプリンタデバイスに送信します。これを行なうため、 CUPS はプリンタデバイスに結び付けられたプリンタドライバと、印刷データをプリンタデバイスに送信するため、プリンタデバイスの接続形態を知っていなければなりません。

このような仕組みにより、 "プリンタをセットアップする" ということは "印刷キューをセットアップする" ことを意味します。具体的には、下記のような情報を CUPS に提供する必要があります:

  • コンピュータとプリンタデバイスとの接続形態
  • プリンタデバイスに対応するプリンタドライバ (PPD ファイル経由)

コンピュータ内部からの見た目では、 CUPS はプリンタデバイスについてではなく、印刷キューに関する情報を保持していることになります。また、 CUPS とアプリケーションプログラムが "プリンタ" と呼ぶのは、通常は実際のプリンタそのものではなく、プリンタに関連付けられた印刷キューのことになります。このように "プリンタ" という言葉の意味するものが場合によって異なることにより、ユーザを混乱させてしまうことがあります。たとえば CUPS やアプリケーションプログラムが "プリンタの準備ができています" と表示されていたとしても、それは実際には印刷キューのことを指しているわけで、その時点ではプリンタデバイスの準備ができていないことがありうる (例えば用紙切れなど) ためです。

さらに詳しくは下記をお読みください:

プリンタドライバ: プリンタから印刷できるようにするための仕組み

プリンタドライバは、プリンタが実際に印刷を行なうための最終的なプリンタ固有データを生成します。

プリンタの型式によってデータの構造は大きく異なります。本来のものとは異なるドライバを使用してしまうと、正しくないデータがプリンタに送信されることになりますので、出力の見た目が悪くなる場合のほか、出力がおかしくなったり全く印刷されなかったりしてしまいます。

プリンタが "サポートされています" と書かれている場合でも、アプリケーションが生成する PostScript の出力と実際の出力が異なる場合があります。これはドライバが特定のプリンタの型式に対して、十分に最適化することができないために発生します (詳しくは SDB:プリンタの購入と互換性の問題について をお読みください) 。

PostScript プリンタの場合、プリンタドライバは不要です。これは PostScript で生成された印刷キューをそのままプリンタが "解釈" できるため、他の "言語" に変換する必要がないためです。たとえば PCL (Hewlett-Packard 社が開発したプリンタコマンド言語) の場合などがこれにあたります。

PostScript プリンタでは、アプリケーションプログラムに対してプリンタ固有の情報を提供するため、型式に対応した PPD ファイルのみが必要となります。

その他のプリンタ (非 PostScript プリンタ) の場合は、特定の型式に正確に適合する PPD ファイルと、プリンタドライバの両方が必要となります。

通常は特定のプリンタ型式に対して "ただ 1 つのドライバ" だけが見つかりますが、場合によっては "最適なドライバ" として表示される場合があります。もちろん最適なドライバを使用したほうがいいのですが、用途によっては異なるドライバを使用したほうがよりよい場合もあります。

たとえば PostScript と PCL の両方に対応したカラーレーザープリンタの場合、下記のいずれかの方法で動作させることができます:

  • PostScript の PPD ファイルを利用した出力
  • カラー PCL ドライバを利用した出力
  • モノクロ PCL ドライバを利用した出力

PCL ドライバを利用して出力したほうが PostScript よりも高速に動作しますが、品質面では劣ってしまいます。また、黒色だけの印刷を行ないたいような場合は、モノクロ PCL ドライバを利用するのが最適です。

PostScript と PCL の両方に対応したプリンタに関する情報:

openSUSE におけるプリンタドライバのソフトウエアパッケージ

YaST の printer モジュールでプリンタドライバのソフトウエアパッケージをインストールする方法について、詳しくは YaST Printer 内の "ドライバ" セクションをお読みください。

openSUSE 11.3 もしくはそれ以前の場合、 cups-drivers パッケージはオールインワン型のパッケージになっています。こちらには独立したドライバのほか、 PPD ファイルなども含まれています。

openSUSE 11.4 もしくはそれ以降の場合、下記のプリンタドライバと PPD ファイルは cups-drivers パッケージでは提供されなくなり、 cups-drivers パッケージ自身も廃止されました:

  • gutenprint: Gutenprint ドライバと対応する PPD ファイル
  • splix: SpliX ドライバと対応する PPD ファイル
  • m2300w: m2300w ドライバと対応する PPD ファイル (メンテナンスが行なわれていないため、 openSUSE 13.2 で廃止されました)
  • OpenPrintingPPDs-ghostscript: Ghostscript 内蔵ドライバ向け PPD ファイル
  • OpenPrintingPPDs-hpijs: 非 HP プリンタ向け HPIJS ドライバ用 PPD ファイル
  • OpenPrintingPPDs-postscript: PostScript プリンタ向け PPD ファイル

また、上記以外にも HP 社製のプリンタとスキャナを含むオールインワンデバイスに対しては、 HP's Linux Imaging and Printing (HPLIP) ドライバを利用する方法があります。こちらには Ghostscript のプリンタドライバである HPIJS と対応する PPD ファイルのほか、ネイティブな CUPS プリンタドライバである HPCUPS と対応する PPD ファイル、そして SANE スキャナドライバである hpaio が含まれています。 openSUSE では HPLIP を hplip, hplip-hpijs というパッケージ名で提供しているほか、 openSUSE 12.1 またはそれ以降のバージョンでは、 hplip-sane いうパッケージも提供しています。詳しくは SDB:HP プリンタの設定方法 をお読みください。

さらに、 openSUSE 12.1 またはそれ以降のバージョンでは、 Linux 向け EPSON 社製インクジェットプリンタドライバ (ESC/P-R) も用意されています。 openSUSE では epson-inkjet-printer-escpr というパッケージ名で提供しています。

PostScript プリンタ向けの製造元提供の PPD ファイルは、 manufacturer-PPDs というパッケージ名で提供しています。


詳細情報:

Linux における標準的なプリンタドライバの開発について

LSB (Linux Standard Base; Linux 標準基盤) の DDK (Driver development kit; ドライバ開発キット) を利用することで、 Linux 向けのディストリビューションに依存しないプリンタドライバパッケージを開発することができます。

プリンタの製造元とプリンタドライバの開発者は、自身で開発したプリンタドライバをパッケージ化し、ディストリビューションに依存しないソフトウエアパッケージとして公開することができます。

このような仕組みにより、ディストリビューション側ではサポートしていないドライバや同梱されていないドライバ、もしくは古くなってしまったバージョンのみが公開されているようなドライバであっても、ユーザはこれらを利用することができるようになっています。

さらに詳しくは、下記をお読みください:

ユーザ側の期待するもの

特に何も心配することなく、印刷を行なうことができるのが適切です。

エンドユーザの期待するもの

ユーザビリティのエキスパートである Peter Sikking 氏と Jan Mühlig 氏は、実在する平均的なユーザに関するいくつかの調査を実施しました。 Peter Sikking は下記の URL で下記のように記しています: http://www.mmiworks.net/eng/publications/labels/openPrinting.html

印刷の第 1 ルール: 印刷なんていう処理は存在しない

m+mi works’ 社のパートナー企業である relevantive 社では、このプロジェクトを始めるにあたってユーザ調査を実施しました。これによると、印刷したいものを表示させてから実際にそれがプリンタに出力されるまでの間、ユーザは価値のある仕事を全く行なっておらず、全く生産的でないことが示されました。

私にとっては、印刷したものとユーザが期待するものとがかけ離れていることが、不思議でなりませんでした。そのため、 Jan 氏は何人かのユーザにテストを実施しました。

そして、印刷なんていう処理は存在しない、ということにたどり着いたわけです。

それはタスクとしても、意味のある動作としても存在しないのです。あなたが紙でそれを読みたいと思ったら、それがすぐにプリンタから出力されるべきなのです。

つまりこれは、ユーザは一般に、洗練された印刷機能に興味があるわけではなく、互換性のない変更を伴うような手間のかかるイノベーションにも興味がないことを示しています。エンドユーザが期待するのは、特に何も心配することなく印刷が動くことなのです。

システム管理者の期待するもの

経験のあるシステム管理者であれば、印刷処理は特別に注意を払うことなく、社内プロジェクトなどでの設計や文書に記述されたとおりに印刷処理が動作することを求めるでしょう。

これは言い換えれば、印刷処理は openSUSE 固有のものがなくても、期待通りにうまく動作する必要があることになり、突然の仕様変更などは期待していないことになります。

そのため、 openSUSE における "印刷" 処理は、アップストリームプロジェクト (主に CUPS, Ghostscript, プリンタドライバプロジェクト) との間で完全な互換性を維持するように作られています。

さらに詳しく