업로드 없이 워드 문서를 PDF로 만들기
이 도구가 하는 일
.docx 파일을 읽어 PDF로 다시 그립니다. 워드 문서는 사실 XML을 담은 ZIP 압축 파일인데, 이 도구는 그 압축을 브라우저에서 열어 안에 든 문단·런·목록·표를 차례로 훑고 pdf-lib으로 페이지에 그립니다. 용지 크기와 여백은 문서 자체의 구역 설정에서 가져오므로 A4 문서는 A4로, 레터 문서는 레터로 나옵니다.
서식도 함께 옮겨집니다. 굵게·기울임·밑줄·취소선, 글자 크기와 색, 정렬과 들여쓰기, 제목 스타일, 중첩 단계를 포함한 글머리표·번호 목록, 본문 속 이미지, 열 너비와 셀 음영이 살아 있는 표, 그리고 PDF에서도 눌리는 하이퍼링크까지 그대로입니다.
탭 하나에서 변환이 끝나는 구조
일하는 부품은 셋뿐이고 전부 내 기기에서 도는 자바스크립트입니다. JSZip이 .docx의 압축을 풀고, 브라우저에 내장된 DOMParser가 그 안의 document.xml·styles.xml·numbering.xml·theme1.xml을 읽고, pdf-lib이 완성된 페이지 객체를 PDF 바이트로 써 냅니다. 이 사슬 어디에도 변환 서버를 오가는 왕복이 없습니다. 변환이 도는 동안 개발자 도구의 네트워크 패널을 열어 두면 직접 확인됩니다.
그래서 보안 말고도 실질적인 차이가 생깁니다. 페이지를 띄워 둔 뒤에는 인터넷이 끊겨도 계속 쓸 수 있고, 15MB짜리 문서도 업로드를 기다리지 않고 곧바로 변환이 시작되며, 속도는 공용 서버가 얼마나 붐비는지가 아니라 내 CPU 성능이 결정합니다.
한글 문서에서 폰트가 결정되는 방식
한글 문서는 거의 예외 없이 폰트를 임베드해야 합니다. PDF에 내장된 기본 폰트 14종은 전부 라틴 문자만 담고 있어서, 한글이 한 글자라도 있으면 그 14종으로는 찍을 수 없기 때문입니다. 그래서 이 도구는 Noto Sans CJK를 내려받은 뒤 HarfBuzz로 문서가 실제로 쓴 글자만 잘라내 그 부분집합만 임베드합니다. 이력서 한 장에 쓰인 한글은 수백 자 남짓이라, 4MB가 넘는 원본 폰트가 수십 KB로 줄어듭니다.
폰트를 똑같이 맞추는 일은 지원 범위 밖입니다. 맑은 고딕·바탕·굴림·나눔고딕은 모두 Noto Sans CJK 한 벌로 대체되므로 자형은 워드와 조금 다르게 보일 수 있습니다. 다만 글자 폭을 실측해 줄을 나누고 `。、」』)` 같은 행두 금칙까지 적용하므로, 줄바꿈 위치와 전체 지면 구성은 원본을 따라갑니다. 임베드한 폰트에도 자형이 없는 글자, 예컨대 이모지나 옛한글은 조용히 버리지 않고 목록으로 알려 줍니다.
지원하는 것과 지원하지 않는 것
표는 지원합니다. 가로 병합, 셀 배경과 테두리, 페이지를 넘어가는 행까지 처리하며, 세로 병합은 이어지는 셀을 빈 칸으로 두고 그립니다. 지원하지 않는 것은 텍스트 상자·도형·워드아트·스마트아트, 차트, 수식, 각주와 미주, 메모, 다단 편집, 표 안에 중첩된 표, EMF·WMF 이미지입니다. 이런 요소를 만나면 해당 부분만 건너뛰고 나머지를 끝까지 변환한 다음, 무엇이 몇 개 빠졌는지 결과 화면에 알려 줍니다. 내용이 줄어든 PDF를 나중에 발견하는 일이 없도록 하기 위해서입니다.
구형 바이너리 .doc 파일은 아예 읽을 수 없으니 워드에서 열어 .docx로 저장한 뒤 사용하세요. 암호가 걸린 문서는 내용 자체가 암호화되어 있어 먼저 해제해야 합니다.