※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レンダラーの間には、パフォーマンス、機能、再現性を含めて、大きなギャップがあることも明らかになりました。