pdf.js: HTML과 JS를 이요한 문서 PDF 읽기

원문: Andreas Gal : pdf.js: Rendering PDF with HTML5 and JavaScript

서울과 대만 등 Firefox 4 출시 파티를 마치고 캘리포니아로 돌아오는 동안에, 저희들은 웹 플랫에서 어떤 일이 생기면 좋을지 멋있는 브레인 스토밍(brainstorming)으로 많은 시간을 때웠습니다. 이전에 생각한 사람은 몇 사람 있었겠지만, 저희들은 왜 아무도 HTML5와 JavaScript로 PDF 리더를 구현하지 않는지 의문으로 생각했습니다. PDF리더에게 필요하게 되는 동작은 빠르게 텍스트를 렌더링 하고 직선을 재생하거나 이미지을 전송 한 후 브라우저 상에서 빠르게 표시하는 일입니다. 브라우저는 벌써 이러한 작업에 대해서 고도로 최적화되어 있습니다.

HTML5에 근거하는 PDF 렌더러를 만들 수가 있으면, 웹 플랫폼 특히 canvas와 SVG의 API가 PDF를 효율적인 렌더링이 가능한 성숙도를 가지고 있는가에 대한 대답일 수도 있습니다.

PDF를 브라우저 내에서 표시하는 일은 사용자 체험을 확실히 향상 시킬것입니다. 웹에는 문자 그대로 수 백만개의 PDF가 존재하고, 많은 기기에 PDF를 읽어 들일 때 다른 애플리케이션 변경(예를 들면, OS X에서는 Preview, Android에서는 PDF View)을 합니다. 또, 외부 PDF 리더와 많은 플러그인은 중요한 PDF의 기능, 예를 들면 내용 내 링크나 fetch-as-you-go (HTTP의 범위 요청)등을 충분히 기술 지원하고 있지 않습니다.

외부 리더와 플러그인은 독자적인 UI 패러다임(paradigm)를 다시 만들어야 하고, 그 결과 브라우저로 HTML 페이지를 스크롤 할 방향과 PDF 리더로 페이지를 스크롤 할 방향이 거꾸로 되는 사태도 생깁니다.

저희들이 바라고 있는 것은 웹 플랫폼에서 웹 브라우저 네이티브 기능으로 PDF 리더를 웹 기술이 되도록 하고자 합니다.

PDF 기능의 이점

웹 브라우저로 PDF를 렌더링 하려면 native code의 플러그인을 사용하는 것이 통상적이었습니다. 이것은 Adobe가 직접 PDF 리더를 만들 거나 기타 상용 프로그램 혹은 오픈 소스(예를 들면 Poppler)을 사용해야 합니다. 보안 관점으로는 이것은 신뢰 받은 코드 베이스를 확대해야 하는 일이고, 그 때문에 Google의 Chrome 브라우저는 코드·인젝션 공격을 피하기 위해서 PDF 렌더러를 샌드박스화 하는 수고를 하고 있습니다. HTML5에 맞추어 구현하면 이런 종류의 문제가 발생하는 일은 없습니다.

프로젝트 시작

저희들은 pdf.js의 개발 저장소를 github.com)에 오픈 한 후 약 1개월간 계속해 왔습니다. 몇 가지 큰 기능(Type1 글꼴이나, 그라데이션등)이 완성되어 나서, pdf.js에 널리 알리려고 생각하고 있었습니다. 저희들의 작업이 곧바로 포착되어 강한 흥미를 끌게되어 저희들도 놀랐습니다. 그래서 저희들은 당초 예정보다 빨리 계획을 블로그로 공개하기로 하였습니다.

저희들의 프로젝트 계획의 하나로서, 2009년의 ACM SIGPLAN PLDI 컨퍼런스에 간 Trace Compilation에 관한 논문(데모 페이지의 문서)을 픽셀 단위로 충실히 렌더링 하는 일을 목표로 하고 있습니다. 이 논문으로 기술되어 있는 Tracemonkey의 작업에 의해서 JavaScript의 JIT의 길이 열렸습니다. 저희들은 pdf.js에 의해서 웹 플랫웹에 유산인 포맷을 구현하기 위한 문이 열릴 것을 기대하고 있습니다.

pdf.js의 데모를 보시고 싶으시면, 링크 를 클릭해 주십시오. 아직 불편함이나 부자연스러운 렌더링도 있겠지만, 대충 이해하실 수 있다고 생각합니다. Type1의 PostScript 글꼴은 아직 구현되어 있지 않으나, Vivien Nicolas가 작업 중 입니다.

앞서 HTML5 의 canvas 요소에 새로운 인터페이스를 몇 개인가 추가하여, PDF 스펙에 있는 어려운 기능을 JavaScript 로 구현하는 방법을 찾아내고자 합니다. 기술적인 개관에 대해서는 Chris의 문서와 「쉐이드 패턴」 렌더링에 관한 자세한 것은 Shaon의 문서를 참조해 주십시오.

향후 계획

저희는 pdf.js 에 의해서, Firefox 내에서 네이티브 PDF를 렌더링 할 생각입니다. 바로 옆의 목표는 가장 잘 사용되는 PDF의 기능을 구현해, 웹에 있는 PDF 파일 대다수를 표시할 수 있도록 하는 일입니다. 이 목표에는 3개월 이내에 도달할 수 있다고 생각하고 있습니다(현재의 코드가 생기기까지 걸린 기간은 1개월미만이며, 벌써 상당한 수의 PDF 기능을 렌더링 하는 것이 되어 있습니다).

우선pdf.js 를 사용해 인 라인의 PDF 렌더링을 가능하게 하는 확장 기능을 작성하고, 흥미를 가진 사용자에게 제공하는 것이 첫번째 작업이 될 것입니다.

확장 기능은 PDF Viewer에서 이미 공개했고, 향후 최종적인 목표는 pdf.js 를 Firefox에 탑재합니다. 사용자에게 있어서는 편리성을 향상 시킬 뿐만이 아니고, 보안 측면에서도 개선이 됩니다. pdf.js 는 안전한 웹 언어만 사용하고, 공격자가 취약성을 실행할 수 있는 native code는 일절 사용하고 있지 않습니다.

오픈 소스로 제공 계획

pdf.js를 커뮤니티에 의해서 운영되는 오픈 소스 프로젝트로 운영하여, Firefox 이외의 브라우저나 웹 애플리케이션에 탑재 되는 것을 보고 싶습니다. 표준에 기반한 웹 기술만으로 쓰여져 있으므로, 표준 기반 브라우저이면 코드는 동작 할 것입니다. 라이센스는 매우 자유로운 BSD 라이센스이며, 외부에서의 공헌자도 환영합니다.

pdf.js를 개선하는 여러분의 아이디어나 코드를 기대하고 있습니다! github 혹은 위키 페이지를 대충 훑어보거나 IRC의 #pdfjs 로 저희들에게 연락해 주십시오.

Chris Jones와 Andreas Gal (그리고 pdf.js 팀)

작성자: Channy Yun

Channy Yun가 작성한 문서들…


댓글이 없습니다.

댓글 쓰기