피드로 돌아가기
Implementing Bates Numbering in Rust — Stamping Every Page of a Legal Document
Dev.toDev.to
Backend

Rust 기반 PDF Content Stream 조작을 통한 500페이지 문서 1초 내 Bates Numbering 구현

Implementing Bates Numbering in Rust — Stamping Every Page of a Legal Document

hiyoyo2026년 4월 26일2intermediate

Context

법적 문서의 고유 식별을 위한 Bates Numbering 구현 시 PDF의 Content Stream 구조로 인한 렌더링 제약 발생. 단순 텍스트 삽입 시 폰트 리소스 누락으로 인한 텍스트 미출력 및 페이지 크기 가변성에 따른 좌표 설정 문제 직면.

Technical Solution

  • PDF Content Stream 내 Text Operator 직접 주입을 통한 페이지별 고유 식별자 렌더링 설계
  • Page Resource Dictionary에 폰트 참조를 강제 삽입하여 PDF 뷰어의 폰트 대체 및 렌더링 오류 방지
  • 페이지별 Width와 Height를 동적으로 계산하는 Position Logic을 통해 A4, Letter 등 다양한 규격 대응
  • Rust의 lopdf 라이브러리를 활용한 낮은 수준의 PDF 객체 조작 및 메모리 효율적 처리
  • Prefix, Start Number, Zero-padding 등 가변 설정을 지원하는 인터페이스 설계

Impact

  • 500페이지 규모의 대형 문서를 1초 미만으로 처리하는 고성능 렌더링 달성

PDF 직접 조작 시 1) Content Stream 수정뿐 아니라 Resources Dictionary의 폰트 참조 일치 여부 확인, 2) 하드코딩 좌표 대신 페이지 메타데이터 기반의 동적 좌표 계산 로직 적용 필요

원문 읽기