티스토리 뷰

Artifex(아티펙스)는 2022년부터 함께해온 이파피루스(ePapyrus)의 자회사로, 두 가지 핵심 엔진을 개발·유지보수해왔습니다.
- 고스트스크립트는 포스트스크립트(PostScript)·PDF 문서를 해석하고 렌더링하는 범용 처리 엔진입니다. 문서를 프린터로 보낼 때, PDF를 이미지로 변환할 때, 대용량 문서를 장기 보관용 PDF/A로 바꿀 때처럼 눈에 잘 띄지 않는 곳에서 묵묵히 일하는 소프트웨어예요.
- MuPDF는 초경량·초고속을 강점으로 내세우는 PDF 렌더링 엔진입니다. 앱이나 웹사이트에 PDF 뷰어 기능을 넣거나 PDF에서 텍스트·이미지를 추출·편집하는 데 널리 쓰이며, 명령줄에서 바로 쓸 수 있는 도구 모음인 mutool도 함께 제공됩니다. 현재 이파피루스의 대표 데이터 추출 제품인 PyMuPDF Pro의 핵심 엔진이기도 하죠.
Artifex는 수년간 PDF Association과 협력하며 PDF 포맷에 브로틀리 압축을 추가하기 위해 노력해왔습니다. 브로틀리는 도입된 지 얼마 되지 않은 압축 방식이다 보니, 아직 모든 PDF 도구·뷰어가 이를 지원하는 것은 아닙니다. 그래서 지금 당장 최대한의 호환성이 중요하다면 기존 방식을 유지하는 편이 낫지만, 장기적인 저장 공간 절감을 생각한다면 브로틀리를 선택할 이유는 충분합니다.
지난해 Artifex는 PDF Association과 함께 관련 발표문을 공동으로 작성하기도 했습니다. 브로틀리를 쓰면 품질 저하 없이 파일 용량을 줄일 수 있는데요, 1,310페이지 분량의 Adobe PDF 1.7 레퍼런스 매뉴얼(30.95MB)을 브로틀리로 압축하면 13MB 남짓까지 줄어듭니다. 텍스트와 벡터 위주의 흑백 문서는 용량이 절반 정도까지 줄어드는 것으로 나타났습니다. 이런 절감 효과는 문서가 수십억 건 단위로 쌓이는 규모에서는 그 의미가 훨씬 커집니다.
이미 많은 인기 PDF 뷰어들이 브로틀리를 지원하도록 업데이트를 마쳤습니다. 그리고 Artifex의 고스트스크립트와 MuPDF 역시 브로틀리를 지원합니다. MuPDF는 2025년 5월 출시된 1.26.0 버전부터, 고스트스크립트는 2025년 9월 출시된 10.06.0 버전부터 브로틀리를 기본으로 지원하고 있습니다. 브로틀리로 압축된 PDF를 읽는 데는 사용자가 별도로 설정을 바꿀 필요가 없지만, 새로 만들 때는 설정 변경이 필요합니다.
MuPDF
기존 PDF는 mutool 커맨드라인 도구를 이용해 무손실로 브로틀리 재압축을 할 수 있습니다. 예를 들면 다음과 같습니다.
mutool clean -dizzZ -e75 input.pdf output.pdf
각 옵션의 의미는 다음과 같습니다.
- d — 재압축을 위해 기존 스트림의 압축을 먼저 풀어줍니다(decompress)
- zz — 기존 Flate 대신 브로틀리로 스트림을 재압축합니다
- Z — 오브젝트 스트림을 사용해 용량을 추가로 절감합니다
- e — 압축 강도(effort) 값을 지정합니다
강도별 체감은 대략 다음과 같습니다.
- 40 — 기본 Flate 압축과 비슷한 속도이면서 결과는 더 좋습니다
- 75 — 최대 Flate 압축과 비슷한 속도를 유지하면서 압축 품질은 한층 좋아집니다
- 100 — 압축 시간은 훨씬 오래 걸리지만 압축률은 최대치입니다
압축에 걸리는 시간과 무관하게, 압축을 푸는(디코딩) 속도는 항상 일정하게 빠릅니다. 이 명령어는 브로틀리가 여러분의 워크플로우에 얼마나 도움이 되는지 가볍게 테스트해보기에 좋은 방법입니다. C API를 사용한다면 pdf_write_options 구조체의 do_compress 값을 2로 설정하는 것만으로 브로틀리 압축을 켤 수 있습니다.
브로틀리로 압축된 PDF를 읽는 데는 별도의 수정이 필요 없죠.
PyMuPDF
PyMuPDF에서는 MuPDF에 내장된 브로틀리 압축 기능을 그대로 활용할 수 있습니다. 브로틀리를 적용하려면 save() 메서드를 아래 파라미터들과 함께 사용하면 됩니다.
- use_objstms — 오브젝트를 압축 가능한 스트림으로 묶어줍니다
- deflate=2 — 압축 알고리즘으로 브로틀리를 사용하도록 지정합니다
- compression_effort=100 — 브로틀리가 압축 품질을 최대한 끌어올리도록 지정합니다
import pymupdf
doc = pymupdf.open("input.pdf")
doc.save(
"output.pdf",
use_objstms=True, # 오브젝트를 압축 가능한 스트림으로 묶기
deflate=2, # 브로틀리 압축 요청
compression_effort=100, # 브로틀리가 최대한 압축하도록 지정
)
doc.close()
MuPDF.NET
MuPDF.NET에서도 PyMuPDF와 동등한 기능을 사용할 수 있습니다. Save 메서드에 같은 방식의 파라미터를 지정하면 됩니다.
using MuPDF.NET;
Document doc = MuPDF.NET.Document.Open("input.pdf");
doc.Save("output.pdf", useObjstms:1, deflate:2, compressionEffort:100);
doc.Close();
고스트스크립트(Ghostscript)
고스트스크립트의 pdfwrite 디바이스로 PDF를 만들 때는 옵션에 -dUseBrotli 플래그를 추가하는 것만으로 브로틀리 압축을 켤 수 있습니다. 예를 들면 다음과 같습니다.
gs -o output.pdf -sDEVICE=pdfwrite -dUseBrotli input.pdf
2026년 9월 출시 예정인 v10.08.0부터는 -dStreamEffort 파라미터로 스트림의 압축 강도를 직접 조절할 수 있게 됩니다. 이 값은 브로틀리의 경우 1~11, Flate의 경우 1~9 범위를 사용할 수 있습니다.
마치며
브로틀리가 PDF에 주는 진짜 가치는 파일 한 개가 아니라, 방대한 문서 컬렉션 전체를 놓고 볼 때 드러납니다. 많은 조직이 이미 수백만에서 수십억 건에 달하는 문서를 오랜 기간에 걸쳐 쌓아왔고, 저장해야 할 데이터의 양은 계속해서 늘어나고 있습니다. 이제 고스트스크립트, MuPDF, PyMuPDF, MuPDF.NET 전반에서 브로틀리 압축을 사용할 수 있게 된 만큼, 이를 도입하면 저장 공간과 그에 따른 비용을 함께 줄이는 데 도움이 될 것입니다.
작은 것이 아름답다는 말이 있죠? 여기에도 딱 들어맞는 것 같습니다!
'PyMuPDF Pro' 카테고리의 다른 글
| 문서 속 표(테이블) 추출의 정확도를 높이는 방법 - PyMuPDF4LLM 1.28 (0) | 2026.07.21 |
|---|---|
| '마크다운도 정식 식구로 인정' PyMuPDF 1.28 주요 업데이트: 샘플 코드 포함 (0) | 2026.07.14 |
| PyMuPDF로 구축하는 가성비 문서 분류(Triage) 파이프라인 (0) | 2026.06.18 |
| 문서 데이터 추출에서 그라운딩(Grounding)이란? (0) | 2026.05.27 |
| 50% 더 빨라진 OCR과 AI 답변의 '근거'를 찾는 법 (0) | 2026.04.09 |
- Total
- Today
- Yesterday
- 고장예측
- PyMuPDFPro
- PDF편집
- 파이썬라이브러리
- PDF-Pro
- pdf프로
- djvu
- 이파피루스
- 스마트공장
- 전자문서
- ocr
- pdf추출
- 피터팬
- Ai
- pdf프로그램
- PDF변환
- 예지보전
- 이벤트
- 전자서식
- pdf뷰어
- epapyrus
- 데이터추출
- 페이퍼리스
- PDFpro
- 피터펜
- 문서ai
- 인공지능
- LLM
- 모터센스
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
