제로 브라우저, 순수 JS로 PDF 생성? VMPrint!

by DD
3개월 전
조회수 20

영화 감독 출신 개발자가 스크립트 작성을 위해 개발한 제로 브라우저 기반의 PDF 타이포그래피 엔진(Typesetting Engine) VMPrint가 출시됨

다국어 지원(Multilingual Support), 복잡한 페이지네이션(Pagination) 및 폰트 렌더링을 위한 자체 엔진을 구축하여 비트 단위로 동일한 PDF 출력을 보장

Headless Chrome, LaTeX 등 기존 솔루션의 단점을 극복하고, Cloudflare Workers, 브라우저 등 다양한 환경에서 실행 가능

커뮤니티에서는 아랍어 렌더링 오류, AI 사용 의혹, Typst와의 비교 등 다양한 의견이 제시됨

VMPrint의 핵심 아키텍처 및 특징

VMPrint는 순수 JavaScript로 작성되어 Node.js, 브라우저, 특정 JavaScript 런타임에 의존하지 않는 독립적인 아키텍처(Independent Architecture)를 갖는다. 특히, 폰트 로딩과 렌더링을 위한 인터페이스를 제공하여 다양한 환경에서 동일한 레이아웃을 보장한다. 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 환경에 구애받지 않고, Cloudflare Workers, Vercel Edge, AWS Lambda 등에서 실행 가능하며, 88KB의 작은 크기로 복잡한 문서도 빠르게 렌더링한다.

다국어 지원 및 폰트 렌더링 기술

VMPrint는 다국어 텍스트 셰이핑(Multilingual Text Shaping)을 위해 Intl.Segmenter를 사용하여 정확한 문자 단위의 텍스트 분할을 수행한다. 라틴 문자, CJK, RTL 스크립트 등 다양한 언어를 지원하며, 언어별 하이픈(Hyphenation) 적용 및 혼합 스크립트(Mixed-Script) 환경에서도 일관된 렌더링을 제공한다. 실제 폰트 메트릭(Font Metrics)을 사용하여 브라우저 기반 렌더링의 부정확성을 해결하고, 비트 단위로 동일한 PDF 출력을 보장한다.

Headless Chrome, LaTeX 등 기존 솔루션과의 비교

VMPrint는 Headless Chrome, PDFKit, LaTeX 등 기존 PDF 생성 도구의 단점을 극복하고자 한다. Headless Chrome은 무거운 의존성, 메모리 누수, 환경에 따른 레이아웃 변화 등의 문제를 야기한다. LaTeX는 TeX 설치, 1970년대 입력 형식, 패키지 충돌 등의 단점이 있다. VMPrint는 이러한 문제들을 해결하고, 문서의 구조를 JSON 형태로 표현하여 재현 가능한 레이아웃(Reproducible Layout)을 제공한다.

커뮤니티의 비판적 시각 및 개선점

커뮤니티에서는 아랍어 렌더링 오류, AI 사용 의혹, Typst와의 비교 등 다양한 의견이 제시되었다. 특히, 아랍어 렌더링 시 문자가 연결되지 않는 문제와 Devanagari 폰트의 결합 문자가 제대로 표시되지 않는 문제에 대한 지적이 있었다. 또한, AI 환각(Hallucination)에 대한 우려와 Typst와 같은 다른 타이포그래피 도구와의 비교를 통해 VMPrint의 개선점을 제시했다.

Show HN: I built a zero-browser, pure-JS typesetting engine for bit-perfect PDFs