클라이언트 측 PDF 생성의 숨겨진 복잡성
PDF를 생성하는 것은 종종 사소한 작업으로 여겨집니다. 단순히 "print to PDF"를 하거나 라이브러리를 호출하는 것뿐이라고 말이죠. 하지만, 고정밀도의 텍스트 선택이 가능한 콘텐츠를 유지하면서 이러한 문서를 완전히 클라이언트 측에서 생성해야 한다는 요구사항으로 바뀌면, 개발자들은 놀라운 복잡성의 세계로 들어서게 됩니다. SDocs를 구축하는 과정은 웹 개발의 근본적인 긴장 상태를 보여줍니다. 즉, 화면을 위해 콘텐츠를 렌더링하는 방식(HTML/CSS)과 PDF와 같은 고정 레이아웃 형식의 문서를 정의하는 방식 사이의 간극입니다.
텍스트 선택 가능성의 과제
사용자들에게 가장 흔한 불만 중 하나는 "죽은" PDF입니다. 즉, 모양은 올바르게 보이지만 이미지처럼 동작하여 텍스트를 선택, 검색 또는 복사할 수 없는 문서입니다. 클라이언트 측에서 생성된 PDF에서 진정한 텍스트 선택 가능성을 달성하려면 단순히 페이지에 문자를 배치하는 것 이상의 것이 필요합니다. 글리프(glyph)를 좌표에 정밀하게 매핑하고 PDF 뷰어가 해석할 수 있는 텍스트 레이어를 포함해야 합니다.
커뮤니티의 개발자들이 언급했듯이, 이는 웹 개발의 "판도라의 상자" 중 하나로, 다양한 클라이언트에서 작동하는 이메일 템플릿을 만드는 악몽과 비슷합니다. 어려움은 PDF가 반응형이 아니라는 점에 있습니다. PDF는 고정 레이아웃 문서입니다. 시각적 글리프와 기본 문자 코드 사이의 관계를 유지하면서 웹 레이아웃의 유동적인 특성을 정적인 좌표 시스템으로 변환하는 것은 결코 쉽지 않은 엔지니어링 작업입니다.
"PDF 지옥": 왜 그렇게 어려운가
초기 생성 단계를 넘어, PDF 형식은 현대적인 데이터 교환을 위한 취약한 도구로 만드는 몇 가지 시스템적 문제를 야기합니다:
1. 복사-붙여넣기 악몽
텍스트가 선택 가능할 때조차도 경험이 종종 깨집니다. PDF는 의미론적 구조보다는 시각적 위치에 집중하기 때문에, 텍스트를 복사하면 문장이 파편화되거나, 공백이 누락되거나, 문자가 잘못된 순서로 나타나는 경우가 많습니다.
"글리프 매핑, 레이아웃, 링크, 코드 블록, 렌더링된 스타일 등을 사용하여 텍스트를 선택 가능하게 만드는 데 얼마나 엄청난 작업이 필요한지 보여줍니다. 하지만 일단 그 PDF에서 복사하면, 대부분의 뷰어는 여전히 원시 텍스트만 노출하며, 종종 깨진 원시 텍스트를 노출하기도 합니다..."
2. 레이아웃 경직성
소프트웨어 엔지니어들은 종종 GUI 및 레이아웃 엔진의 복잡성을 과소평가합니다. 예를 들어, 여러 페이지에 걸쳐 있는 표를 렌더링하는 것은 헤더, 푸터, 행 분할을 처리하기 위한 복잡한 로직이 필요합니다. 이는 paged.js 프로젝트가 페이지 미디어에 오픈 웹 표준을 적용하여 해결하려고 시도하는 문제입니다.
3. 편집의 간극
기존 PDF를 편집하는 것은 악명하게 어렵습니다. 체크박스를 채우는 것과 같은 간단한 작업조차도, 시각적 표현이 실제 데이터 레이어와 일치하지 않는 경우가 많기 때문에 조 silently fail하거나 복잡한 스크립트를 사용하여 기본 PDF 구조를 조작해야 할 수 있습니다.
대안적 접근 방식 및 솔루션
네이티브 PDF 생성의 복잡성을 고려할 때, 몇 가지 대안적 전략이 등장했습니다:
- WASM-based Compilers: 일부 개발자들은 Typst와 같은 도구를 사용하여 WebAssembly (WASM)로 컴파일하여 브라우저에서 로컬로 실행함으로써, 고품질의 이고 선택 가능한 PDF를 생성하기 위한 더 견고한 파이프라인을 제공할 수 있다고 제안합니다.
- Intermediate Formats: Markdown을 LaTeX나 안정적인 중간 형식으로 변환하는 것은 Pandoc을 사용하여 더 신뢰할 수 있는 렌더링 파이프라인을 것을 제공할 수 있지만, 이는 종종 더 무거운 의존성을 유래합니다.
- HTML-to-PDF Bridges: 풍부한 텍스트를 2D canvas context로 렌더링하고 그 context를 PDF 라이브러리에 프록시하는 라이브러리들은 시각적 충실도를 유지하는 데 필요한 과정을 단순화할 수 있습니다.
- The "Vibecoding" Approach: 일부 사용자들은 내부 도구를 위해 PDF를 완전히 건너뛰고, PDF를 HTML 번들로 변환한 뒤 스크립트를 사용하여 가변 데이터를 주입하여, PDF를 문서 형식이라기보다 시각적 템플릿으로 취급하는 방식으로 성공을 거두었습니다.
결론: PDF는 적절한 도구인가?
완벽한 PDF를 생성하려는 노력은 종종 더 넓은 범위의의 철학적 질문으로 이어집니다. 즉, 디지털 우선 콘텐츠를 위해 PDF를를 사용할까요? 인쇄 및 법적 보관을 위해 필수적이지만, PDF는 현대 웹의 반응형, 검색 가능성, 접근성 특의 성질상 근본적으로 부합하지 않습니다. 책, 과학 논문, 카탈로그 등을 위해 HTML과 EPUB과 같은 표준은 리더 에코시스템이 계속해서 발전한다면 훨씬 더 우수한 유연성과 접근성을 제공합니다.