オープンプリンティング・システム用のPDFレンダラを開発しましたので、 ここに、公開いたします。
PDFレンダラの開発は、独立行政法人 情報処理推進機構 (IPA:Information-technology Promotion Agency, Japan.)のオープンソース活用基盤整備事業にて行いました。
Free Standards Group(以下FSG)のOpenPrinting WG(Working Group)では、 Linuxなどオープンソース環境における印刷環境を改善すべく、 標準の策定を行っています。オープンプリンティングプロジェクトでは、 有志により、FSGで策定中の標準案の実装を行い、 実現性の実証、改良の提案、普及活動を行っています。
これまでに、以下の開発を行いました。
この仕 様は現時点では標準ではなく、OpenPrinting Work Groupの作業成果に伴い、 変更される可能性があります。
上記のモジュールは、印刷環境CUPSの上で動作し、 印刷環境を向上させるものです。既存のCUPSも、 上記のシステムもレンダラとしてGhostscriptを使用しています。 PDFなどのPostscript(以下PSと略します)以外のデータは、 一旦PSに変換後、Ghostscriptで処理されます。
PDFの場合は、pdftopsというフィルタプログラムによって、PSに変換され、 Ghostscriptで処理されます。このため、以下のような欠点があります。
また、Ghostscript自体も直接にPDFを処理可能ですが、 この機能を利用するには、以下のような欠点があります。
しかしながら、PDFはページ記述言語として広く普及しており、 PDFを効率的に扱うことが重要となってきています。
そこで、pdftops、 Ghostscriptの代わりとなる、 高速で高機能なPDFレンダラを開発しました。
PDFレンダラの開発は、以下の目的で行いました。
PDFレンダラは、次図に示すように、 CUPSのフィルタとして動作します。 下図の斜線部がPDFレンダラです。 GhostscriptでPDFを処理する場合に使用する pdftops、pstops、Ghostscriptの三つのフィルタの代わりとなります。
PDFファイルは、CUPSのスケジューラによって、 PDFレンダラ(opvppdf)に入力されます。PDFレンダラは、 ベクタープリンタドライバを使用して、 PDFファイルから各プリンタ依存のデータ形式に変換します。 変換されたデータは、バックエンドに入力されます。 バックエンドは、BIDIプラグインなどを使用して、 プリンタにデータを送り込みます。
実装にあたっては、以下のような方針としました。
開発期間の短縮とコストの削減のため、 xpdf 3.00を改造して開発することにしました。
xpdfは、PDF1.5を解釈するとなっていますが、 すべての機能を実装していません。 そこで、PDF 1.3準拠を目指すことにしました。ただし、 シェーディングのうち、タイプ5,6,7を実装していません。
暗号化機能、対話機能、文書交換機能は、 印刷に関係していないため実装していません。
次図にPDFレンダラの構造を示します。 PDFドキュメント処理および描画の最上位層は、 xpdfのものを使用しています。 ベクタプリンタ・ドライバAPIのための描画層を作成し、 xpdfのSplash描画モジュール、 Splashフォント・モジュールと合せてAPI層を作成しました。 このAPI層をオープンプリント・レンダリング・サブルーチンAPIと呼ぶことにします。 xpdfのドライバ・クラスOutputDevクラスを このAPIを使用するように実装しています。
今回のPDFレンダラの特徴は、以下の通りです。
Ghostscript7.06では、 異常終了してしまったりエラーになるPDFファイルを処理できます。
おおよそ数パーセントから数十パーセント高速です。 ファイルによっては、20倍以上高速です。
Ghostscriptとpdftopsでは、描画できない以下の機能を実装しています。
オープンプリント・レンダリング・サブルーチンAPIを提供しています。 このAPIを使用すれば、ベクタプリンタドライバAPIの利用が容易になります。 このAPIは、以下の特徴を持ちます。
PDFレンダラは、以下よりダウンロードできます。インストール方法等は、ダ ウンロード後、tarファイルを展開後READMEファイルを見てください。
OPVPPDF001.tgz動作確認プリンタ:
動作確認OS:
株式会社アックス 松武 菜穂美 nahomi@axe-inc.co.jp
Linuxは、Linus Torvaldsの米国、日本、および、
その他の国における登録商標または商標です。
その他、本文中の社名や商品名は、
各企業・機関・団体等の商標または登録商標です。