付録4:性能比較方法#

この記事では、PyMuPDF の性能を測定するアプローチと、比較を行うために使用されるツールとサンプルファイルについて説明します。

以下の3つのセクションでは、異なる性能の側面に取り組んでいます:

  • ドキュメントのコピー - これには PDF ファイルの開閉と解析、そしてそれらを出力ファイルに書き込む作業が含まれます。同じ基本的なアクティビティは、PDF ファイルの結合(マージ)にも使用されるため、結果はこれらのユースケースにも適用されます。

  • テキスト抽出 - これにより PDF ファイルから平文テキストが抽出され、テキストファイルに書き込まれます。

  • ページレンダリング - これによりPDFページがページと同じような見た目の画像ファイルに変換されます。この機能は、Python GUI スクリプトでドキュメントをスクロールするための基本的な前提条件です。中画質版(解像度150 DPI)を選択しました。

PDF 構造の処理速度そのものを直接測定するのではなく、すべての場合において、タイミングにはファイルをオペレーティングシステムのファイルシステムに書き込む時間も含まれることに注意してください。これは回避できない要因です。なぜなら、PyMuPDF 以外のツールでは、例えばイメージの 作成 ステップと、イメージをファイルに 書き込む 後続のステップを分離するオプションが提供されていないためです。

したがって、すべての記録されたタイミングには共通のOS指向の基本的な努力が含まれています。したがって、ツールごとの性能の違いは、数字が示す以上に実際には大きいです

使用されるファイル#

性能テストには、8つのファイルセットが使用されます。各ファイルには、次の情報があります:

  • ファイル とダウンロード リンク

  • バイト単位の サイズ

  • ファイル内の総 ページ 数。

  • ブックマーク( 目次 エントリー)の総数。

  • リンク の総数。

  • ページごとの KBサイズ

  • ページごとのテキストサイズ は、ファイル全体のテキスト量をKBで割ったものです。

  • ファイルのタイプを一般的に説明するための メモ

ファイル名

サイズ(バイト)

ページ数

目次サイズ

リンク数

KB/ページ

テキストサイズ/ページ

メモ

adobe.pdf

32,472,771

1,310

794

32,096

24

1,942

線形化、多くのリンク/ブックマーク

artifex-website.pdf

31,570,732

47

46

2,035

656

3,538

グラフィックス志向

db-systems.pdf

29,326,355

1,241

0

0

23

2,142

fontforge.pdf

8,222,384

214

31

242

38

1,058

テキストとグラフィックスのミックス

pandas.pdf

10,585,962

3,071

536

16,554

3

1,539

多くのページ

pymupdf.pdf

6,805,176

478

276

5,277

14

1,937

テキスト志向

pythonbook.pdf

9,983,856

669

198

1,953

15

1,929

sample-50-MB-pdf-file.pdf

52,521,850

1

0

0

51,291

23,860

単一ページ、グラフィックス志向、大きなファイルサイズ

注釈

adobe.pdfpymupdf.pdf は明らかにテキスト志向です。artifex-website.pdf と sample-50-MB-pdf-file.pdf はグラフィックス志向です。その他のファイルは両方のミックスです。

使用されるツール#

各セクションでは、同じ固定されたセットの PDF ファイルが一連のツールによって処理されます。ただし、性能の側面ごとに使用されるツールのセットは、サポートされるツールの機能に応じて異なります。

すべてのツールは、プラットフォームに依存しないか、少なくとも WindowsUnix / Linux の両方で実行できます。

ツール

説明

PyMuPDF

このマニュアルのツールです。

PDFrw

rst2pdf で使用される純粋な Python ツールで、ReportLabとのインターフェースを持っています。

PyPDF2

多くの機能を備えた純粋な Python ツールです。

PDFMiner

PDF からテキストやその他のデータを抽出するための純粋な Python ツールです。

XPDF

複数の機能を備えたコマンドラインユーティリティです。

PikePDF

C++ ライブラリ QPDF に基づいた Python パッケージで、 PDFrw に類似しています。

PDF2JPG

PDF ページを JPG 画像にレンダリングすることに特化した Python パッケージです。

コピー / 結合 / マージ#

PDF ファイルの読み取りおよびそのコンテンツの解析は、どれだけ高速に行われるのでしょうか?純粋な解析の性能を直接比較することはできません。なぜなら、バッチユーティリティは常に要求されたタスクを一度に完全に実行するからです。 PDFrw も解析の際には レイジー な戦略を採用しており、必要な瞬間に必要な部分のみを解析します。

したがって、この質問に答えるために、各ツールで PDF ファイルを出力ファイルにコピーする時間を計測し、それ以外の操作は行いません。

各ツールの使用方法に関する Python コマンドは以下の通りです:

PyMuPDF

import pymupdf
doc = pymupdf.open("input.pdf")
doc.save("output.pdf")

PDFrw

doc = PdfReader("input.pdf")
writer = PdfWriter()
writer.trailer = doc
writer.write("output.pdf")

PikePDF

from pikepdf import Pdf
doc = Pdf.open("input.pdf")
doc.save("output.pdf")

PyPDF2

pdfmerge = PyPDF2.PdfMerger()
pdfmerge.append("input.pdf")
pdfmerge.write("output.pdf")
pdfmerge.close()

観察結果

以下は、実行時間の結果( 秒単位)と、 PyMuPDF との比較における基本レートの要約です:

ファイル名

PyMuPDF

PDFrw

PikePDF

PyPDF2

adobe.pdf

1.75

5.15

22.37

374.05

artifex-website.pdf

0.26

0.38

1.41

2.81

db-systems.pdf

0.15

0.8

1.68

2.46

fontforge.pdf

0.09

0.14

0.28

1.1

pandas.pdf

0.38

2.21

2.73

70.3

pymupdf.pdf

0.11

0.56

0.83

6.05

pythonbook.pdf

0.19

1.2

1.34

37.19

sample-50-MB-pdf-file.pdf

0.12

0.1

2.93

0.08

合計

3.05

10.54

33.57

494.04

PyMuPDFに対する比率

1.0

3.5

11.0

162

テキスト抽出#

以下の表は、プレーンテキストの抽出にかかる時間を示しています。すべてのツールは、基本的な機能のみを使用しています - レイアウトの再配置などはありません。

観察結果

以下は、実行時間の結果( 秒単位)と、 PyMuPDF との比較における基本レートの要約です:

ファイル名

PyMuPDF

XPDF

PyPDF2

PDFMiner

adobe.pdf

2.01

6.19

22.2

49.15

artifex-website.pdf

0.18

0.3

1.1

4.06

db-systems.pdf

1.57

4.26

25.75

42.19

fontforge.pdf

0.24

0.47

2.69

4.2

pandas.pdf

2.41

10.54

25.38

76.56

pymupdf.pdf

0.49

2.34

6.44

13.55

pythonbook.pdf

0.84

2.88

9.28

24.27

sample-50-MB-pdf-file.pdf

0.27

0.44

8.8

13.29

合計

8.01

27.42

101.64

227.27

PyMuPDFに対する比率

1.0

3.42

12.69

28.37

ページのレンダリング#

私たちは、解像度150 DPIで PyMuPDF のレンダリング速度を pdf2jpgXPDF と比較しました。

各ツールの使用方法に関する Python コマンドは以下の通りです:

PyMuPDF

def ProcessFile(datei):
print "processing:", datei
doc=pymupdf.open(datei)
for p in pymupdf.Pages(doc):
    pix = p.get_pixmap(dpi=150)
    pix.save("t-%s.png" % p.number)
    pix = None
doc.close()
return

XPDF

pdftopng.exe -r 150 file.pdf ./

PDF2JPG

def ProcessFile(datei):
    print("processing:", datei)
    pdf2jpg.convert_pdf2jpg(datei, "images", pages="ALL", dpi=150)
    return

観察結果

以下は、実行時間の結果( 秒単位)と、 PyMuPDF との比較における基本レートの要約です:

ファイル名

PyMuPDF

XPDF

PDF2JPG

adobe.pdf

51.33

98.16

75.71

artifex-website.pdf

26.35

51.28

54.11

db-systems.pdf

84.59

143.16

405.22

fontforge.pdf

12.23

22.18

20.14

pandas.pdf

138.74

241.67

202.06

pymupdf.pdf

22.35

39.11

33.38

pythonbook.pdf

30.44

49.12

55.68

sample-50-MB-pdf-file.pdf

1.01

1.32

5.22

合計

367.04

646

851.52

PyMuPDFに対する比率

1.0

1.76

2.32


This software is provided AS-IS with no warranty, either express or implied. This software is distributed under license and may not be copied, modified or distributed except as expressly authorized under the terms of that license. Refer to licensing information at artifex.com or contact Artifex Software Inc., 39 Mesa Street, Suite 108A, San Francisco CA 94129, United States for further information.

Discord logo