PDF 안에는 무엇이 있나: 객체, 스트림, 상호 참조 표
PDF는 번호 붙은 객체와 압축 스트림, 바이트 오프셋 xref로 이루어진 작은 데이터베이스입니다. Get Info는 읽기만 하고, 그 지도가 깨지면 Repair가 구조를 다시 세웁니다.

PDF는 페이지를 평평하게 쏟아 낸 덤프가 아닙니다. 객체로 이루어진 작은 데이터베이스이고, 많은 것이 압축된 스트림으로 저장되며, 상호 참조 표(xref)가 위치를 알려 주어 리더가 파일 전체를 훑지 않고 17번 객체로 건너뛸 수 있습니다. 그 지도가 깨지면 페이지 바이트가 디스크에 그대로 있어도 뷰어는 파일이 손상됐다고 말합니다.
객체
관심 있는 모든 것(페이지, 글꼴, 이미지, 메타데이터, 문서 카탈로그)이 번호를 가진 객체입니다. 페이지는 콘텐츠 스트림과 리소스를 가리키고, 리소스는 글꼴과 XObject를 가리키며, 카탈로그는 페이지 트리를 가리킵니다. 병합이나 회전, 스탬프 도구는 픽셀을 다시 그리기보다 이 그래프를 다시 쓰는 일을 주로 합니다.
스트림
스트림은 페이로드가 바이트 열인 객체이고, 흔히 Flate로 압축돼 있습니다. 페이지 콘텐츠 연산자, 임베드된 글꼴 파일, 이미지 데이터가 여기 들어갑니다. 텍스트 편집기로 PDF를 열면 ASCII 토큰과 이진 덩어리가 섞여 보이는 이유입니다. 페이지 모양은 그대로 두고 스트림을 펼치는 일은 디버깅에 유용합니다. 이 사이트의 PDF 압축은 그 스트림을 qpdf로 다시 압축하며, 이미지를 다운샘플링하거나 글꼴을 서브셋팅하지는 않습니다.
상호 참조 표
일반적인 파일의 끝부분 근처에 xref 절(최신 파일에서는 xref 스트림)이 각 객체 번호의 바이트 오프셋을 나열합니다. 리더는 그 오프셋으로 이동합니다. 잘린 다운로드, 잘못된 병합, 절반만 기록된 저장은 트레일러가 더 이상 맞지 않는 오프셋을 가리키게 만들곤 합니다. 1페이지의 픽셀은 아직 있을 수 있지만 “1페이지”를 찾아 주는 지도는 없습니다.
그래서 구조 복구는 OCR이나 잠금 해제와 다른 작업입니다. 복구는 유효하게 남은 조각에서 내부 구조를 다시 세우며, 빠진 페이지 그림을 만들어 내거나 비밀번호를 추측하지 않습니다.
다시 쓰기 전에 점검하기
문서 정보는 수정된 PDF가 아니라 JSON 보고서(페이지 수, 메타데이터, 글꼴, 구조 세부)를 반환합니다. 압축이나 변환, 복구 전에 지금 들고 있는 게 무엇인지 알아야 할 때 쓰세요.
뷰어가 파일을 아예 열지 않으면 상호 참조 복구를 포함해 구조를 다시 세우는 PDF 복구를 시도하세요. 파일은 열리는데 스캔한 텍스트를 선택할 수 없다면 그것은 xref 문제가 아니라 OCR 문제입니다.
짧은 판단 순서
- 파일이 열리지 않는다 → 먼저 PDF 복구.
- 파일은 열리고 사실 정보(페이지, 글꼴, 암호화 단서)가 필요하다 → 문서 정보.
- 구조는 멀쩡하고 더 작은 파일이나 스캔에서 읽을 텍스트를 원한다 → 크기는 PDF 압축, Markdown 텍스트는 OCR. 복구를 한 번 더 돌릴 일은 아니다.
Get Info와 Repair는 둘 다 계정 없이 실행됩니다. 같은 op를 HTTP로 쓰려면 개발자를 보세요. Repair가 브랜드 데스크톱 “복구” 제품과 어떻게 다른지는 PDF 온라인 복구와 Recovery Toolbox 검색을 보세요.