폰트 서브셋팅이 편집은 깨뜨리고 읽기는 깨뜨리지 않는 이유
폰트 서브셋팅은 PDF가 이미 쓰는 글리프만 남깁니다. 읽기와 인쇄는 되지만 새 문자를 넣으면 실패합니다. PDF123 압축은 서브셋팅을 하지 않고, 빠진 글리프를 되돌리지도 않습니다.

PDF가 완벽해 보여도 다음에 입력하는 글자를 거부할 수 있습니다. 흔히 뷰어가 깨진 게 아니라 폰트 서브셋팅 때문입니다. 파일이 작성될 때 필요했던 글리프만 임베드했고, 편집은 한 번도 담긴 적 없는 글리프를 요구하는 것입니다.
서브셋이란
TrueType과 OpenType 폰트는 글리프가 수만 개일 수 있습니다. 열 페이지짜리 메모는 그중 몇백 개만 씁니다. 서브셋팅은 임베드된 폰트를 다시 써서 쓰이지 않은 글리프를 버립니다. 파일 크기는 줄고, 이미 문서에 있는 텍스트의 화면 및 인쇄 렌더링은 그대로입니다. 문서에 이미 들어 있는 문자는 전부 남아 있기 때문입니다.
따라서 읽기와 인쇄는 성공합니다. 실패 모드는 나중에 드러납니다. 누군가 편집기에서 PDF를 열고 악센트 문자나 드문 문장 부호를 입력하면, 빠진 글리프가 다른 글자로 치환되거나 빈칸이 되거나 거부됩니다. 이미 있던 텍스트의 복사-붙여넣기는 대개 여전히 되고, 글리프 표의 구멍에 부딪히는 것은 새 문자의 삽입입니다.
서브셋팅은 폰트를 없애는 일이 아닙니다
폰트 객체는 임베드된 채 남습니다. 빠져나가는 것은 글리프 표에서 쓰이지 않은 부분입니다. 다음 경우와 다릅니다.
- 읽는 사람의 머신에 설치된 시스템 폰트에 의존하기(운영체제를 넘나들면 치환 위험)
- 텍스트를 외곽선이나 이미지로 바꾸기(선택과 검색이 죽습니다)
- 파일 암호화(비밀번호 설정): 암호화는 글리프를 서브셋팅하지 않습니다
많은 오피스 내보내기 도구와 PDF 인쇄 드라이버는 폰트를 임베드할 때 기본으로 서브셋팅합니다. 손상은 내보내는 시점에 생기지, 나중에 뷰어가 파일을 열 때 생기지 않습니다. 다른 PDF 도구로 다시 저장할 때 재서브셋팅될 수도 있고 아닐 수도 있지만, 한 번도 기록되지 않은 글리프를 기적처럼 되살리지는 않습니다.
PDF123 압축이 실제로 하는 일
PDF 압축(POST /api/v1/misc/compress-pdf)는 qpdf에 스트림 압축(--compress-streams=y), flate 데이터 재압축, 객체 스트림 생성을 요청합니다. 폰트를 서브셋팅하지 않고, 이미지 다운샘플링을 주장하지도 않습니다. 파일의 스트림이 이미 촘촘하면 다운로드 크기가 거의 그대로일 수 있습니다. 파일에 이미 서브셋 폰트가 들어 있으면 Compress는 그 서브셋을 그대로 둡니다. 완전한 자소로 되돌려 펼치지는 않습니다.
일반적인 PDF 파이프라인에서 크기 손잡이들이 어떻게 맞물리는지(이미지, 스트림, 구조)는 PDF를 압축할 때 실제로 일어나는 일을 보세요. 그 글은 배경으로 읽고, 이 사이트의 압축 버튼이 서체를 서브셋팅한다는 주장으로 읽지는 마세요.
OCR과 Markdown 변환도 PDF에서 빠진 글리프를 되살리지 않습니다. OCR은 Markdown 텍스트를 반환하고, PDF를 Markdown으로은 텍스트 레이어에 이미 들어 있는 내용을 추출합니다.
실무에서의 편집과 읽기
| 동작 | 서브셋팅 이후의 전형적인 결과 |
|---|---|
| 열기, 스크롤, 인쇄, 기존 텍스트 선택 | 정상. 참조된 글리프가 다 있음 |
| 원본에 한 번도 쓰이지 않은 문자 삽입 | 실패하거나 치환될 수 있음 |
| PDF 안에 완전히 편집 가능한 폰트를 기대 | 취약함. 서브셋이 안 쓰인 글리프를 버렸음 |
| PDF123에서 압축 실행 | 스트림은 줄 수 있지만 글리프 목록은 그대로 |
완전한 문자 집합으로 계속 편집해야 한다면 서브셋팅이 잘못된 내보내기 설정이었습니다. 편집 가능한 원본(Word, 새로 렌더링하려면 Markdown을 PDF로 변환한 Markdown)이나 완전한 자소를 여전히 임베드한 PDF를 쓰는 편이 낫습니다. PDF123의 압축이 그 글리프를 되돌려 놓지는 않습니다.
“이 PDF에서 é를 입력할 수 없다”를 진단할 때는 뷰어나 PDF 복구를 탓하기 전에 원본 내보내기가 폰트를 서브셋팅했는지 확인하세요. Repair는 구조를 재구성할 뿐 글리프 표를 늘리지 않습니다. Markdown을 거쳐 왕복하면 그 렌더링에 WeasyPrint가 임베드한 폰트를 가진 새 PDF가 나옵니다. 새 문서에는 유용하지만, 오래된 서브셋 자소를 외과적으로 복원하는 방법은 아닙니다.