オープンプリンティング・システム用PDFレンダラ

オープンプリンティング・システム用のPDFレンダラを開発しましたので、 ここに、公開いたします。

PDFレンダラの開発は、独立行政法人 情報処理推進機構 (IPA:Information-technology Promotion Agency, Japan.)のオープンソース活用基盤整備事業にて行いました。

背景

Free Standards Group(以下FSG)のOpenPrinting WG(Working Group)では、 Linuxなどオープンソース環境における印刷環境を改善すべく、 標準の策定を行っています。オープンプリンティングプロジェクトでは、 有志により、FSGで策定中の標準案の実装を行い、 実現性の実証、改良の提案、普及活動を行っています。

これまでに、以下の開発を行いました。

  1. Vector Printer Driver
  2. 標準案のVector Printer Driver API
  3. Ghostscript GlueCode
  4.  GhostscriptからVector Printer Driver APIを利用するためのモジュール
  5. Bidiプラグイン
  6. プリンタの情報取得などプリンタとの双方向の通信を制御するモジュール
  7. プリンタデーモン
  8. プリンタとの双方向通信を常時実施可能とするモジュール
  9. プリンタ状態表示ツール
  10. プリンタとの双方向通信を行い情報を表示するモジュール

この仕 様は現時点では標準ではなく、OpenPrinting Work Groupの作業成果に伴い、 変更される可能性があります。

上記のモジュールは、印刷環境CUPSの上で動作し、 印刷環境を向上させるものです。既存のCUPSも、 上記のシステムもレンダラとしてGhostscriptを使用しています。 PDFなどのPostscript(以下PSと略します)以外のデータは、 一旦PSに変換後、Ghostscriptで処理されます。

PDFの場合は、pdftopsというフィルタプログラムによって、PSに変換され、 Ghostscriptで処理されます。このため、以下のような欠点があります。

  1. PDFに比較して、PSのデータ量は非常に大きくなり、メモリ使用量、 処理時間が増えてしまいます。
  2. pdftopsは、PDFの機能のうち、 いくつかサポートしていないものが存在するため、 正常に印刷できない場合があります。

また、Ghostscript自体も直接にPDFを処理可能ですが、 この機能を利用するには、以下のような欠点があります。

  1. Ghostscriptは、PDFを処理するには、複雑過ぎるため、 処理時間が多くなります。
  2. PDFを処理するには、複雑なためメンテナンスにコストがかかります。
  3. 正常に処理できないPDFファイルが少くありません。

しかしながら、PDFはページ記述言語として広く普及しており、 PDFを効率的に扱うことが重要となってきています。

そこで、pdftops、 Ghostscriptの代わりとなる、 高速で高機能なPDFレンダラを開発しました。

開発の目的

PDFレンダラの開発は、以下の目的で行いました。

  1. ページ記述言語として、 広く普及しているPDFをVector Printer Driverで印刷できるようにする。
  2. PDFを扱うには、複雑で非効率なGhostscriptに代るレンダラを開発する。
  3. Vector Printer Driver APIを使用する開発を行い仕様の改良に役立てる。
  4. Vector Printer Driver APIの上位層のAPIライブラリを提供して レンダラの開発を容易にする。

構成

PDFレンダラは、次図に示すように、 CUPSのフィルタとして動作します。 下図の斜線部がPDFレンダラです。 GhostscriptでPDFを処理する場合に使用する pdftops、pstops、Ghostscriptの三つのフィルタの代わりとなります。

PDFファイルは、CUPSのスケジューラによって、 PDFレンダラ(opvppdf)に入力されます。PDFレンダラは、 ベクタープリンタドライバを使用して、 PDFファイルから各プリンタ依存のデータ形式に変換します。 変換されたデータは、バックエンドに入力されます。 バックエンドは、BIDIプラグインなどを使用して、 プリンタにデータを送り込みます。

実装

実装にあたっては、以下のような方針としました。

  1. xpdf 3.00を改造
  2. 開発期間の短縮とコストの削減のため、 xpdf 3.00を改造して開発することにしました。

  3. PDF 1.3準拠を目指す
  4. xpdfは、PDF1.5を解釈するとなっていますが、 すべての機能を実装していません。 そこで、PDF 1.3準拠を目指すことにしました。ただし、 シェーディングのうち、タイプ5,6,7を実装していません。

  5. 印刷に関係する機能のみを実装
  6. 暗号化機能、対話機能、文書交換機能は、 印刷に関係していないため実装していません。

次図にPDFレンダラの構造を示します。 PDFドキュメント処理および描画の最上位層は、 xpdfのものを使用しています。 ベクタプリンタ・ドライバAPIのための描画層を作成し、 xpdfのSplash描画モジュール、 Splashフォント・モジュールと合せてAPI層を作成しました。 このAPI層をオープンプリント・レンダリング・サブルーチンAPIと呼ぶことにします。 xpdfのドライバ・クラスOutputDevクラスを このAPIを使用するように実装しています。

特徴

今回のPDFレンダラの特徴は、以下の通りです。

  1. Ghostscript7.06と比較して、安定しています。
  2. Ghostscript7.06では、 異常終了してしまったりエラーになるPDFファイルを処理できます。

  3. Ghostscript7.06よりも高速です。
  4. おおよそ数パーセントから数十パーセント高速です。 ファイルによっては、20倍以上高速です。

  5. Ghostscriptとpdftopsを使用した場合よりも、高機能です。
  6. Ghostscriptとpdftopsでは、描画できない以下の機能を実装しています。

  7. オープンプリント・レンダリング・サブルーチン・ライブラリ
  8. オープンプリント・レンダリング・サブルーチンAPIを提供しています。 このAPIを使用すれば、ベクタプリンタドライバAPIの利用が容易になります。 このAPIは、以下の特徴を持ちます。

ダウンロード

PDFレンダラは、以下よりダウンロードできます。インストール方法等は、ダ ウンロード後、tarファイルを展開後READMEファイルを見てください。

OPVPPDF001.tgz

動作確認プリンタ:

動作確認OS:

開発

問合せ先

株式会社アックス 松武 菜穂美 nahomi@axe-inc.co.jp

参考URL

商標

Linuxは、Linus Torvaldsの米国、日本、および、 その他の国における登録商標または商標です。
その他、本文中の社名や商品名は、 各企業・機関・団体等の商標または登録商標です。