附录 4:性能比较方法#

本文档介绍了衡量 PyMuPDF 性能的方法以及用于进行比较的工具和示例文件。

以下三节介绍不同的性能方面

  • 文档复制 - 这包括打开和解析 PDF 文件,然后将它们写入输出文件。由于相同的基本活动也用于合并 PDF 文件,因此结果也适用于这些用例。

  • 文本提取 - 这从 PDF 文件中提取纯文本,并将其写入输出文本文件。

  • 页面渲染 - 这将 PDF 页面转换为与页面外观相同的图像文件。此功能是在 Python GUI 脚本中使用工具滚动浏览文档的基本前提。我们选择了中等质量(150 DPI 分辨率)的版本。

请注意,在所有情况下,处理 PDF 结构的实际速度并未直接测量:相反,计时还包括将文件写入操作系统文件系统的时间。这是无法避免的,因为除了 PyMuPDF 之外的其他工具不提供例如将图像的 创建 步骤与随后的将图像 写入 文件的步骤分开的选项。

因此,所有记录的计时都包含一项共同的、面向操作系统的基础工作。因此,每种工具的性能 差异实际上比数据显示的要大

使用的文件#

性能测试使用了一组八个文件。对于每个文件,我们提供了以下信息

  • 文件 名称 和下载 链接

  • 以字节为单位的 大小

  • 文件中的总 页数

  • 总书签数(目录 条目)。

  • 链接 数。

  • 每页 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.pdfsample-50-MB-pdf-file.pdf 是图形导向的。其他文件是两者的混合。

使用的工具#

在每一节中,都使用一组固定的 PDF 文件由一组工具进行处理。然而,根据支持的工具功能,每个性能方面使用的工具集是不同的。

所有工具要么是平台独立的,要么至少可以在 WindowsUnix / Linux 上运行。

工具

描述

PyMuPDF

本手册介绍的工具。

PDFrw

一个纯 Python 工具,被 rst2pdf 使用,并提供与 ReportLab 的接口。

PyPDF2

一个功能集丰富的纯 Python 工具。

PDFMiner

一个纯 Python 工具,用于从 PDF 中提取文本及其他数据。

XPDF

一个具有多种功能的命令行工具。

PikePDF

一个类似于 PDFrwPython 包,但基于 C++QPDF

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

页面渲染#

我们测试了 PyMuPDFpdf2jpgXPDF 在 150 DPI 分辨率下的渲染速度,

以下是每种工具使用的 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


本软件按“原样”提供,不作任何明示或默示保证。本软件根据许可分发,除非该许可条款明确授权,否则不得复制、修改或分发。有关许可信息,请参阅 artifex.com 或联系 Artifex Software Inc.,地址:39 Mesa Street, Suite 108A, San Francisco CA 94129, United States 获取更多信息。