피드로 돌아가기
Dev.toFrontend
원문 읽기
서버 없는 Client-side PDF-to-Word 변환기 구현 및 RTL 텍스트 복원
How I built a PDF Word converter that runs 100% in the browser (no server)"
AI 요약
Context
기존 PDF 변환 도구의 서버 업로드 방식에 따른 데이터 프라이버시 침해 문제 해결 필요. PDF의 구조적 특성인 '단순 좌표 기반 글리프 배치'로 인한 문단 및 표 구조 손실과 RTL(Right-to-Left) 언어의 논리적 순서 파괴라는 기술적 한계 존재.
Technical Solution
- pdf.js를 통한 텍스트 좌표 및 폰트 메타데이터 추출 후 폰트 크기의 0.18배라는 임계값을 적용한 기하학적 공백 복원 로직 설계
- 수직 간격, 정렬 변경, 짧은 마지막 줄 분석을 통한 문단 및 헤딩 추론 및 문서 전체 Bold 비율(40% 미만 시 적용)을 활용한 시각적 계층 구조 재구성
- RTL 언어 처리를 위해 Visual Order의 글리프 런을 반전시킨 후 Latin/Digit 구간만 다시 LTR로 되돌리는 BiDi(Bidirectional) 패스 구현
- 단순 X-gap 분할의 한계를 극복하기 위해 2개 이상의 앵커 그룹을 가진 연속 라인을 식별하는 기하학적 영역 분석 기반 Table 복원
- 의 텍스트 쉐이핑 기능을 활용해 Arabic 폰트 임베딩 복잡성을 회피하고 docx 라이브러리로 Client-side Blob 생성 및 다운로드 구현
실천 포인트
1. 좌표 기반 데이터 복원 시 폰트 크기(fs)에 비례하는 상대적 임계값을 설정했는가
2. RTL 언어 처리 시 시각적 순서(Visual Order)와 논리적 순서(Logical Order)의 변환 로직을 포함했는가
3. 폰트 스타일(Bold 등)의 신뢰도를 판단하기 위해 문서 전체의 통계적 분포(Fraction)를 계산했는가
4. 메인 스레드 점유를 방지하기 위해 Async 디코딩에 대한 동기식 폴백 또는 타임아웃을 설정했는가