Skip to content

PDF Oxide vs pypdfium2

PDF Oxide와 pypdfium2는 모두 네이티브로 컴파일된 빠른 Python PDF 라이브러리입니다. pypdfium2는 Google의 PDFium 엔진을 래핑하고, PDF Oxide는 Rust 코어 위에 구축됐습니다. 가장 큰 차이는 범위입니다 — pypdfium2는 주로 리더·렌더러지만, PDF Oxide는 생성, 추출, OCR, 폼, 암호화, 컴플라이언스를 포함한 PDF 전체 라이프사이클을 다룹니다.

주요 차이점

속도. 둘 다 빠릅니다. PDF Oxide가 약간 더 빠릅니다: 평균 0.8ms vs 4.1ms (5.1배 차이). 둘 다 Pure Python 라이브러리보다 극적으로 빠릅니다.

기능. pypdfium2는 렌더링이 가능한 읽기 전용입니다. PDF Oxide는 생성, 편집, 폼 쓰기, 암호화, Markdown/HTML 출력, OCR을 추가합니다.

신뢰성. PDF Oxide는 유효 PDF의 100%를 통과합니다. pypdfium2는 99.2% — 31개 실패입니다.

라이선스. 둘 다 허용적입니다. PDF Oxide는 MIT, pypdfium2는 Apache-2.0입니다. 둘 다 AGPL 우려가 없습니다.

빠른 비교

PDF Oxide pypdfium2
평균 추출 시간 0.8ms 4.1ms
통과율 (3,830개 PDF) 100% 99.2%
라이선스 MIT Apache-2.0
언어 Rust + PyO3 C (PDFium)
텍스트 추출
문자 위치
이미지 추출
Markdown 출력 아니오
HTML 출력 아니오
PDF 생성 아니오
PDF 편집 아니오
폼 필드 읽기 + 쓰기 읽기 전용
암호화 읽기 + 쓰기 읽기 전용
렌더링
OCR 내장 아니오
검색 정규식 + 공간 검색

코드 비교

텍스트 추출

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
text = doc.extract_text(0)
print(text)

pypdfium2:

import pypdfium2 as pdfium

pdf = pdfium.PdfDocument("report.pdf")
page = pdf[0]
textpage = page.get_textpage()
text = textpage.get_text_range()
print(text)

이미지 추출

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
images = doc.extract_image_bytes(0)
for i, img in enumerate(images):
    with open(f"image_{i}.{img['format']}", "wb") as f:
        f.write(img["data"])

pypdfium2:

import pypdfium2 as pdfium

pdf = pdfium.PdfDocument("report.pdf")
page = pdf[0]
for i, obj in enumerate(page.get_objects()):
    if obj.type == pdfium.FPDF_PAGEOBJ_IMAGE:
        bitmap = obj.get_bitmap()
        bitmap.to_pil().save(f"image_{i}.png")

PDF 생성

PDF Oxide:

from pdf_oxide import Pdf

pdf = Pdf.from_markdown("# Report\n\nQuarterly results are in.")
pdf.save("report.pdf")

pypdfium2:

# pypdfium2는 PDF를 생성할 수 없습니다.
# 렌더링 기능이 있는 읽기 전용 라이브러리입니다.

렌더링

PDF Oxide:

from pdf_oxide import PdfDocument

doc = PdfDocument("report.pdf")
image = doc.render_page(0, dpi=150)
image.save("page.png")

pypdfium2:

import pypdfium2 as pdfium

pdf = pdfium.PdfDocument("report.pdf")
page = pdf[0]
bitmap = page.render(scale=150/72)
bitmap.to_pil().save("page.png")

벤치마크 상세

지표 PDF Oxide pypdfium2
평균 추출 시간 0.8ms 4.1ms
p99 추출 시간 9ms 42ms
통과율 (유효 PDF) 100% (3,823/3,823) 99.2% (3,792/3,823)

두 라이브러리 모두 네이티브 코드(각각 Rust와 C)를 사용하지만, PDF Oxide의 텍스트 추출 파이프라인은 이 작업에 특화되어 최적화되었습니다 — 사전 할당된 버퍼와 캐시된 페이지 트리를 사용한 단일 패스 추출입니다.

자세한 내용은 전체 벤치마크 방법론에서 코퍼스 세부사항을 확인하세요.

기능 완성도

두 라이브러리의 가장 큰 차이점은 범위입니다. pypdfium2는 렌더링이 가능한 리더이고, PDF Oxide는 전체 PDF 라이프사이클을 다룹니다:

기능 PDF Oxide pypdfium2
읽기 및 추출
페이지 렌더링
PDF 생성 예 (Markdown, HTML, 이미지) 아니오
기존 PDF 편집 예 (텍스트, 이미지, 주석) 아니오
폼 필드 채우기 아니오
암호화 쓰기 예 (AES-256) 아니오
Markdown/HTML 출력 아니오
스캔 페이지 OCR 예 (ONNX 기반 PaddleOCR) 아니오
PDF/A 검증 아니오

PDF를 읽고 렌더링하는 것만 필요하다면, pypdfium2는 좋은 선택입니다. 생성, 편집, 폼 채우기, 암호화 등 어떤 쓰기 기능이 필요하다면, PDF Oxide가 단일 라이브러리 솔루션입니다.

pypdfium2 라이선스 (Apache-2.0)

pypdfium2는 Apache-2.0 라이선스이며, 상용 이용을 허용합니다. 하지만 Google의 PDFium(Chromium PDF 엔진)을 래핑하며, 이는 자체 BSD 스타일 라이선스를 가지고 있습니다. 둘 다 허용적입니다.

주요 고려사항:

  • Apache-2.0 — 허용적, 상용 이용 허용, 저작자 표시 필요
  • PDFium 의존성 — 바이너리에 Chromium의 PDFium 엔진 포함 (~15 MB)
  • Google 릴리스 주기 — pypdfium2는 Chromium 프로젝트의 PDFium 릴리스에 의존
  • Python API 안정성 보장 없음 — API가 PDFium의 C API를 밀접하게 따름

PDF Oxide는 MIT 라이선스 — Apache-2.0보다 더 허용적이며, 바이너리 배포 시 저작자 표시 요구사항이 없습니다.

언제 어떤 것을 사용할까

PDF Oxide를 선택하세요:

  • 읽기/렌더링 이상이 필요한 경우 (생성, 편집, 폼, 암호화)
  • Markdown 또는 HTML 변환을 원하는 경우
  • 스캔 문서를 위한 내장 OCR이 필요한 경우
  • 최고의 신뢰성이 필요한 경우 (100% vs 99.2%)
  • 속도가 중요하고 대규모에서 5배 차이가 중요한 경우

pypdfium2를 선택하세요:

  • PDF를 읽고 렌더링하는 것만 필요한 경우
  • PDFium의 특정 렌더링 출력을 선호하는 경우
  • 더 작은 의존성 풋프린트를 원하는 경우

관련 페이지