부록 4: 성능 비교 방법론

이 문서는 PyMuPDF’s 성능을 측정하는 접근 방식과 비교에 사용된 도구 및 예제 파일을 설명합니다.

다음 세 섹션은 다양한 성능 측면을 다룹니다:

  • Document Copying - 이것은 PDFs 를 열고 파싱한 다음 출력 파일에 쓰는 것을 포함합니다. 동일한 기본 활동이 PDFs 를 결합(병합)하는 데도 사용되므로, 결과는 이러한 사용 사례에도 적용됩니다.

  • Text Extraction - 이것은 PDFs 에서 일반 텍스트를 추출하고 출력 텍스트 파일에 씁니다.

  • Page Rendering - 이것은 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

linearized, many links / bookmarks

artifex-website.pdf

31,570,732

47

46

2,035

656

3,538

graphics oriented

db-systems.pdf

29,326,355

1,241

0

0

23

2,142

fontforge.pdf

8,222,384

214

31

242

38

1,058

mix of text & graphics

pandas.pdf

10,585,962

3,071

536

16,554

3

1,539

many pages

pymupdf.pdf

6,805,176

478

276

5,277

14

1,937

text oriented

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

rst2pdf 에서 사용되는 순수 Python 도구로, ReportLab 에 대한 인터페이스를 가집니다.

PyPDF2

큰 함수 집합을 가진 순수 Python 도구.

PDFMiner

PDF 에서 텍스트 및 기타 데이터를 추출하는 순수 Python.

XPDF

여러 기능을 가진 명령줄 유틸리티.

PikePDF

PDFrw 와 유사한 Python 패키지이지만, 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

페이지 렌더링

150 DPI 해상도에서 pdf2jpgXPDF 와 비교하여 PyMuPDF 의 렌더링 속도를 테스트했습니다,

각 도구를 사용하는 방법에 대한 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(f"t-{p.number}.png")
    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.