desktools.run
35 명 접속 중|5.4천 회 이용
블로그 목록으로 돌아가기
WebAssemblyAugust 15, 2026

WebAssembly와 pdf-lib을 활용한 무서버 PDF 병합 및 압축 엔진

Official desktools.run Article

WebAssembly와 pdf-lib을 활용한 무서버 PDF 병합 및 압축 엔진

기업 문서, 개인 계약서, 금융 서류 등 중요한 PDF 문서를 처리할 때 기존 웹 서비스들은 사용자의 PDF 바이너리를 원격 서버로 전달받아 C/C++ 기반 파이프라인(Poppler, Ghostscript 등)으로 처리하곤 했습니다.

그러나 desktools.run은 pdf-lib 기술과 WebAssembly(Wasm) 바이너리 스트림 파싱 엔진을 조합하여 서버 연산 없이 100% 브라우저 메모리 내부에서 PDF 바이너리 객체 구조를 직접 조작합니다.


📄 1. PDF 1.7 사양 및 Object Stream 구조 분석

PDF 파일은 단순한 이미지가 아닌, 폰트 딕셔너리, 벡터 객체, 이미지 바이너리 스트림, 텍스트 레이아웃 정보를 포함하는 복잡한 개체 트리(Object Tree) 데이터 구조입니다:

Catalog & Pages Tree Root: 문서의 전체 구조와 각 페이지 번호의 노드 관계를 정의합니다.
Page Dictionary: 각 페이지에 포함된 폰트, 자원 리소스, XObject 이미지를 격리 참조합니다.
XRef (Cross-Reference Table): 파일 내부 객체들의 바이트 오프셋(Byte Offset) 위치를 추적하여 임의 접근(Random Access)을 보장합니다.

🧩 2. 무손실 페이지 병합(Merging) & 분할(Splitting) 알고리즘

desktools.run의 PDF Merger 및 Splitter는 다음과 같은 알고리즘으로 동작합니다:

1.
ArrayBuffer 메모리 수신: 사용자가 선택한 PDF 파일들을 브라우저의 Uint8Array 메모리 버퍼로 바로 로드합니다.
2.
PDFDocument.load() & XRef 파싱: 서버 전송 없이 메모리 상에서 XRef 인덱스를 구축하고 필요한 페이지 딕셔너리만 독립 추출합니다.
3.
copyPages() & 리소스 중복 제거(Deduplication): 여러 PDF를 합칠 때 중복되는 폰트 세트와 공유 이미지를 단일 객체로 병합하여 최종 PDF 파일 용량을 획기적으로 줄입니다.

🗜️ 3. FlateDecode 스트림 재압축을 통한 용량 최적화

PDF 압축(PDF Compress) 도구는 문서 내부에 포함된 압축 스트림(FlateDecode Stream)을 파싱하여, 불필요한 메타데이터 딕셔너리를 제거하고 텍스트/폰트 오브젝트 스트림을 Wasm 기반 zlib 커스텀 파이프라인으로 재압축하여 가독성 손상 없이 최적의 용량 감소를 달성합니다.


🔒 4. 보안과 생산성의 결합

모든 PDF 작업이 사용자의 컴퓨터 RAM 메모리 안에서 완료되므로, 아무리 높은 보안 등급의 계약서나 개인 금융 PDF 문서라도 안심하고 안전하게 작업할 수 있습니다.

지금 desktools.run의 PDF Merge, Split, Compress 도구를 사용해 보세요!