Adobe Acrobat PDF 뷰어에 대한 무료 대안 제작
(github.com/embedpdf)- EmbedPDF는 JavaScript 프로젝트 어디서나 쉽게 연동할 수 있는 오픈소스 PDF 뷰어 제공
- React, Vue, Svelte, Preact, Vanilla JS 등 다양한 프론트엔드 프레임워크와의 호환성 강점 보유
- 주석, 하이라이트, 실제 텍스트 삭제(레닥션), 검색, 확대/축소, 회전 등 풍부한 기능 포함
- 가상 스크롤 및 플러그인 구조로 성능 향상과 확장성 모두 지원
- MIT 라이센스로 누구나 자유롭게 사용 및 기여 가능
EmbedPDF 오픈소스 PDF 뷰어 프로젝트 개요
EmbedPDF는 JavaScript 프로젝트 어디든 손쉽게 삽입할 수 있는, 프레임워크 독립적인 오픈소스 PDF 뷰어임.
MIT 라이센스를 적용하며, React, Vue, Svelte, Preact, Vanilla JS 등 다양한 현대적 프론트엔드 프레임워크와의 호환성 강점 보유함
- 모던한 읽기 환경과 개발자 친화적 API를 제공함
주요 기능
- 주석 지원: 하이라이트, 스티키 노트, 자유 텍스트, 잉크 등 다양한 주석 기능 제공
- 진짜 레닥션: 레닥션 기능 사용 시 문서 내 실제 콘텐츠가 완전하게 제거되는 보안 기능 지원
- 검색, 텍스트 선택, 확대/축소, 회전 등의 핵심 PDF 조작 기능 포함
- 부드럽고 가상화된 스크롤링으로 대용량 문서도 성능 저하 없이 열람 가능
- 플러그인 기반 아키텍처와 트리 세이커블 플러그인을 통해 불필요한 코드 제외 및 확장 용이성 보장
문서 및 데모
- 공식 문서, 설치 가이드, API 레퍼런스, 예시는 https://www.embedpdf.com 에서 확인 가능
- 라이브 데모에서 직접 PDF 파일을 업로드하거나 샘플 문서로 기능 체험 가능함
오픈소스 및 라이센스
- MIT 라이센스로 소스코드 자유 사용 및 기여 가능
- PDFium을 포함하고 있으며, 이 부분은 Apache License 2.0에 따름
커뮤니티 및 기여
- 오픈소스 커뮤니티 참여 및 다양한 기여를 환영함
- Contributing 가이드 및 Github Discussions에서 개발자 커뮤니케이션 가능
프로젝트의 중요성 및 차별점
- 기존 상용 PDF 뷰어 대안으로, 누구나 자유롭게 사내 혹은 SaaS에 PDF 뷰어 기능 손쉽게 도입 가능함
- 다양한 프레임워크와의 높은 호환성 및 현대적, 모듈형 구조가 차별점임
- 레닥션 등 고급 PDF 처리 기능을 오픈소스에서 제공하는 드문 예시임
Hacker News 의견
- 실제로 중요한 작업은 PDFium에서 이루어지고 있음, PDFium은 Google이 Foxit에서 인수 후 직접 개발을 계속해온 프로젝트이며 현재 Chrome에 적용 중임을 안내함 (나는 한창 논의되고 있는 작업을 폄하하는 게 아니고, 단지 완전히 새로 작성된 PDF 파서가 아니라는 점을 언급함)
- 많은 PDF 뷰어(상업용 제품 포함)가 PDFium을 기반으로 만들어지고 있다고 생각함
- Mozilla PDF.js가 존재하는데도 이 프로젝트를 개발한 이유가 궁금함 https://github.com/mozilla/pdf.js (비판이 아니라, 이미 있는 것을 다시 만드는 데엔 수많은 이유가 있기 때문에 단순한 궁금증임)
- 주요 목표는 개발자가 웹사이트에 손쉽게 통합할 수 있는 PDF 뷰어를 만드는 것이었음, PDF.js는 일부 활용 사례에선 커스터마이징과 확장이 어렵거나 복잡함
- PDF 마크업(주석, 도형, 코멘트)이 필요한 경우, 직접 구축하거나 상당히 비싼 구독형 PDF 에디터만이 선택지로 떠오르는데, 실제로 Apryse를 연동한 팀들은 단순 PDF 편집 지원 비용만으로도 부담이 매우 크다고 들음
- 얼핏 보기만 해도 주석 코멘트 등 기존 제품들과는 다른 기능이 있음을 알 수 있음
- iPad나 iPhone에서 데모 문서를 열어 보면, Print Preview 기능이 데스크탑 장치에서만 작동함을 알 수 있음
- 402개의 오픈 이슈를 보고 PDF의 엄청난 복잡성과 그 모든 기능을 처리하는 데 드는 노고를 짐작할 수 있음
- 예전에 PDF 뷰어를 내장한 사이드 프로젝트를 해본 적이 있음, 첫 버전은 pdf.js를 썼지만 빠르게 확대(zoom)할 땐 버벅이고 포커스 유지가 힘들었음, 그래서 C++ pdfium과 Metal 렌더링으로 직접 구현했음 데모 영상에서 확인 가능함, 타일링 방식을 적용해 메모리와 성능의 균형을 맞췄음, pdfium이 WebAssembly에서도 이 정도로 성능이 좋은 줄 몰랐으며, 사실 C++보다 웹에서 UI 개발하는 쪽이 더 편함
- 솔직히 데모가 훨씬 더 빠르고 부드럽게 느껴짐, zoom 동작이 정말 매끄럽게 구현되어 있음, 이걸 보고 나도 다시 개발에 뛰어들어 성능을 개선해보고 싶다는 생각이 듦
- pdf.js를 사용 중인데(17MB, 158페이지, 이미지 다수, Windows 환경) 테스트하면서 겪은 문제점을 공유함
- 링크가 동작하지 않음
- 북마크는 보이는데 작동하지 않음
- 파이어폭스에선 텍스트 선택 불가
- 크롬에서 미들 클릭(스크롤 용도)이 텍스트 선택으로 연결됨
- pdf.js에서는 스크롤이 괜찮은데, 본 제품에서는 스크롤 시 수백~천 밀리 초 동안 화면이 흐릿하게 보이며 품질 저하가 심함, 엔드 키 등으로 여러 페이지를 점프하면 하얀 화면만 보임
- FF에서는 위/아래, 페이지 업/다운, 홈/엔드가 동작하지 않음(좌우는 동작)
- 간단하게 테스트해보았고, Firefox에서는 주석 기능이 아예 동작하지 않았으나 Chrome에서는 밑줄, 하이라이트 등 모든 주석 기능이 정상 임을 확인함
- Firefox에서 주석 테스트를 아직 못 해봤으니 알려줘서 고맙다는 메시지, Chrome에서는 문제없이 동작해 다행임을 공유함, 곧 확인해볼 계획임
- 임베디드 아웃라인(주석) 편집을 지원하는지 궁금함, PDF 뷰어/에디터에서 항상 가장 아쉬웠던 기능으로, 아웃라인 없는 PDF 받을 때마다 이 기능이 필요함을 느낌
- 리눅스+Firefox 조합에서는 데모에서 주석/음영 처리(redaction) 도구가 전혀 동작하지 않음, 반면 Chromium에서는 동일 머신에서 잘 동작함
- Firefox에서 발생한 문제를 방금 수정했으며, 이제 Linux + Firefox와 Chromium 양쪽 모두에서 주석 및 음영 처리 기능이 정상 동작함을 안내함
- 문서화도 훌륭하며 headless React 라이브러리 컨셉이 특히 마음에 들었음, 커스텀 UI와 기능을 손쉽게 붙일 수 있음, 특정 용어를 자동 하이라이트/밑줄 처리 후 클릭 혹은 hover 시 커스텀 컴포넌트를 표시하는 건 얼마나 어려운지 질문함
- 아주 간단하게 할 수 있음, 이미 그런 기능이 구현됨, AnnotationLayer에서 직접 selectionMenu와 커스텀 컴포넌트를 렌더링 가능함, 더 깊이 들어가고 싶다면 Discord 채널로 문의해달라고 안내함
- 제품이 인상적으로 보임, 궁금한 점은 이렇게 기능이 풍부한 무료 PDF 뷰어 개발을 어떻게 지속할 계획인지임, 엔터프라이즈용 기능이나 PDF 호스팅 혹은 다른 수익화 모델을 계획 중인지 질문함
- 질문에 대해 모두 '예스'라고 답변, 클라이언트 쪽 PDF 뷰어는 무료+MIT 라이선스 유지, 다만 PDF 호스팅과 엔터프라이즈용 분석/액세스 컨트롤 등 부가 기능은 유료 서비스로 제공할 계획임
- 전체적으로 잘 작동하는데, 음영처리(redaction) 툴을 뷰 모드로 전환할 때(빨간 줄이 활성화된 상태) 여전히 redaction이 활성화돼 스크롤 불가 현상이 있었음, 새로고침으로 해결됨
- 좋은 피드백이고 곧 수정할 예정임, 모바일에서는 정밀한 영역 선택의 편의성 때문에 redaction 모드에서는 스크롤이 비활성화되는 게 의도된 동작임, 하지만 뷰 탭으로 전환하면 무조건 redaction 모드를 종료해야 함, 발견해줘서 고맙다는 답변임