※Alfresco社のPDFレンダリングエンジンを選定した際の報告の日本語訳文です。原文
■市場概要
WikipediaとGoogleで調査した結果、PDFレンダリングエンジンの一覧表を作成しました。
Engine | License | 備考 |
---|---|---|
Ghostscript | AGPLv3 or Commercial | フルPostScriptインタプリタ。PDFファイルも扱える。 |
MuPDF | AGPLv3 or Commercial | モダンな高性能FitzグラフィックスエンジンをベースにしたPDF、XPS、EPUBレンダリングエンジン。 |
Adobe PDF Library SDK | Commercial | オリジナルのAdobe PDFエンジン。 |
Foxit SDK | Commercial | Foxit PDFリーダー製品を支えるエンジン。GoogleがPdfiumとしてBSDライセンスで公開した。 |
Pdfium | BSD style | ChromのPDFプラグインを支えるエンジン Foxit SDKのフォーク |
Poppler | GPLv2 or GPLv3 | XPdfのフォーク |
Xpdf | GPLv2 or Commercial | X-Windows用PDFビューア&全プラットフォーム用PDFラスタライザ(pdftopng)。 |
GnuPDF | GPLv3 | |
PDFBox 2.0 | Apache 2.0 | |
Sejda | AGPLv3 or Commercial | |
IcePDF | Apache 2.0 and Commercial Pro version | |
Aspose PDF | Commercial |
(注:PDF Readerは多数ありますが、上記はこれらの製品を支えているPDFレンダリングエンジンの統合リストです)
■候補製品
ライセンス条件やその他の要因の制約を考慮し、私たちはこの候補リストから深く徹底的な調査を開始することにしました。参考までに、代表的なプロプライエタリ・ライブラリをいくつか挙げておきます。
Engine | Type | Version |
---|---|---|
Ghostscript | Native | 9.21 |
MuPDF | Native | 1.10a |
Xpdf | Native | 3.04 |
Pdfium | Native | 2017-04-10 |
Aspose | Java | 17.2.0 |
ICEPdf | Java | 6.2.0 |
Sejda | Java | 3.0.13 |
PDFBox | Java | 2.0.5 |
バージョン番号は、調査時点(※2018年5月)の最新リリース版です。
■パフォーマンス
サムネイルなどのために、ACS 5.1までは、PDFファイルをPNG画像にレンダリングするにはGhostscriptが使用されてきました。MS Officeファイルのような他のほとんどのファイル形式は、プレビューのためにまずPDFに変換され、その後、PDFがPNGに変換されます。我々の分析では、全体性能の平均値に関心を持ちました。
我々のチームは、内部のAlfrescoリポジトリから、3071個のPDF文書(17,226ページ)をサンプルセットとしてランダムに選びました。ACSの中には、特定の種類のドキュメントを主に含むものもあることは承知していますが、このサンプルセットは、ACSリポジトリの大部分を代表していると確信しています。 パフォーマンスを比較するために、すべてのドキュメントを100dpiのPNGファイルにレンダリングしました。各エンジンは同等の再現性で結果を出すように設定され(例えばアンチエイリアスのかかったテキストやグラフィックを有効にするなど)、各エンジンには同じリソースを保証しました。Javaベースのエンジンはすべて、JVMを起動したまま、同じJVMプロセスで各ドキュメントのレンディションを実行し、Hotspotが生成するネイティブコードを最適化できるようにしました。 総処理時間は以下となります。
(総レンダリング時間:数値が小さいほど高性能)
結果がどのように変わるかを見るために、異なるdpi設定で遊んでみました。その結果、エンジン間の相対的な差は解像度(dpi)に影響されますが、順位(近いものを除いて)が変わらないことがわかりました。
主な調査結果は以下の通り:
・ネイティブエンジンは常にJavaベースのエンジンより速い
・MuPDFは明らかに最速のエンジンである
・Pdfiumは2位ですが、MuPDFよりかなり遅いです
■機能と再現性
私たちの新しい変換エンジンは、サーバーベースでPDF文書からPNGファイルへのレンダリングに使用されるため、フォーム入力、署名検証、ビデオ、3Dなどは、調査対象外でした。
最新のPDF仕様に基づき、PDF描画モデルによって提供される機能のリストを作成しました。各機能について、テスト用のサンプル文書を選んだり、そのような文書を自作したりしました。そして、これらのサンプル文書の描画を目視で比較し、評価しました。なお、ビューアーは最新のAdobe
Acrobat Readerを使用しました。
テキスト描画とフォントサポート
Text rendition & font support | Ghostscript | MuPDF | Xpdf | Pdfium | Aspose | ICEPdf | Sejda | PDFBox |
---|---|---|---|---|---|---|---|---|
Type1 | 4 | 5 | 4 | 5 | 1 | 1 | 4 | 4 |
TrueType | 4 | 5 | 4 | 5 | 4 | 0 | 5 | 5 |
Type1 CID | yes | yes | yes | yes | yes | no | yes | yes |
TrueType CID | yes | yes | yes | yes | yes | no | yes | yes |
Type3 | 3 | 5 | 6 | 6 | 1 | 0 | 1 | 1 |
AVG | 3.67 | 5 | 4.67 | 5.33 | 2 | 0 | 3.33 | 3.33 |
※Acrobatのリファレンスと比較して、各表現に0〜5点を与えました。2つのケースでは、Acrobatよりも視覚的に優れた結果が得られた場合、さらに1点を追加しました。
Font_Type1
Font_TrueType
Font_Type3
画像
PDFは、ラスターグラフィックデータを保存するために使用できる6種類の「フィルター」(すなわち圧縮形式)に対応しています。デコードされたラスターグラフィックは、レンダリングされた出力グラフィックのピクセルにマッピングされる必要があります。このプロセスは、最終的なビジュアル結果に大きな影響を与えます。
Images | Ghostscript | MuPDF | Xpdf | Pdfium | Aspose | ICEPdf | Sejda | PDFBox |
---|---|---|---|---|---|---|---|---|
Anti Aliasing | no | yes | yes | yes | no | partial | no | no |
CCITTFaxDecode | yes | yes | yes | yes | yes | yes | yes | yes |
DCTDecode | yes | yes | yes | yes | yes | yes | yes | yes |
LZWDecode | yes | yes | yes | yes | yes | yes | yes | yes |
FlatDecode | yes | yes | yes | yes | yes | yes | yes | yes |
JPXDecode | yes | yes | yes | yes | no | partial | no | no |
JBIG2Decode | yes | yes | yes | yes | yes | yes | partial | partial |
SUM Image | 3 | 5 | 5 | 5 | 2 | 2 | 1 | 1 |
※すべてのエンジンは5点からスタートします。いずれのフィルターサポートがない場合は1点、アンチエイリアシングが機能しない場合は2点減点します。
描画モデル
アトミックな描画操作(MoveTo,
LineTo, CurveTo)とシェーディングモデル(shading models)は、すべてのエンジンでほぼ等しくサポートされていることに気づきました。複雑な描画における視覚的な差は、基本操作(basic
operations)そのものではなく、主にこれらのアトミックなビルディングブロック(atomic building
blocks)によって引き起こされます。
このため、今回は描画操作の構成に着目して比較することにしました。
合成とブレンドモード
PDFは16種類のブレンドモードに対応しています。これらは、単一のオブジェクトに適用することも、透明度を持つグループ内の複数のオブジェクトに適用することもできます。各ブレンドモードは、画像チャンネルに個別に作用するため、異なる色空間(RGB、CMYK)において異なる結果を生み出します。
テスト用と参照用のPDFファイル(RGBとCMYK)を使用し、それぞれのエンジンで発生したエラーを数えました。すべてのテストファイルの平均で最も少ないエラーに5ポイント、多くのエラーを0ポイントとして、相対的なエラー数を使用してポイントを割り当てました。最終結果は以下の通りです。
Blend Modes | Ghostscript | MuPDF | Xpdf | Pdfium | Aspose | ICEPdf | Sejda | PDFBox |
---|---|---|---|---|---|---|---|---|
AVG | 3.33 | 3.33 | 3 | 2 | 1.67 | 1 | 2 | 2 |
再現性結果
上記をすべて組み合わせると、特徴と再現性について以下となります。
※レンディション再現性:数値が大きいほどいい
■結論
この調査では、MuPDFが明らかに勝者となり、Pdfiumが2位に続きました。また、ネイティブのPDFレンダラーとJavaベースのPDFレンダラーの間には、パフォーマンス、機能、再現性を含めて、大きなギャップがあることも明らかになりました。