附录 4:性能比较方法#

本文记录了测量PyMuPDF性能的方法以及用于比较的工具和示例文件。

以下三个部分处理不同的性能方面:

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

  • 文本提取 - 这从 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

数据库系统.pdf

0.15

0.8

1.68

2.46

字体锻造.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

示例-50-兆字节-pdf-文件.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

数据库系统.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

示例-50-MB-pdf-文件.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的分辨率下测试了PyMuPDFpdf2jpgXPDF的渲染速度,

这些是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 ./

PDF转JPG

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

数据库系统.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

示例-50-兆字节-pdf-文件.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以获取更多信息。