열리지만 잘못된 순서로 페이지를 표시하는 PDF는 손상된 내부 페이지 트리로 인해 문제가 발생합니다. 페이지 자체는 손상되지 않았습니다. 각 페이지의 텍스트, 이미지 및 벡터 그래픽이 올바르게 렌더링됩니다. 문제는 페이지 트리라고 알려진 문서의 페이지 목차가 뒤섞여 있어서 시청자가 3페이지를 요청하면 7페이지를 읽거나, 사이에 아무것도 없이 12페이지에서 41페이지로 건너뛰는 것입니다. 이는 PDF 파일 형식의 가장 기본적인 데이터 구조 중 하나의 구조적 오류로, 놀라워 보이지만 페이지 내용을 잃지 않고 복구할 수 있는 경우가 많습니다.
페이지 트리는 모든 PDF가 페이지를 구성하는 데 사용하는 계층적 데이터 구조입니다. PDF 사양은 페이지를 단순 목록에 저장하는 대신 페이지 노드 트리로 구성하여 단일 문서가 수천 페이지를 효율적으로 참조할 수 있도록 합니다. 트리의 각 리프 노드는 단일 페이지 개체를 참조하고 각 페이지 개체에는 해당 페이지에 대한 콘텐츠 스트림이 포함됩니다. 페이지 트리의 루트는 모든 PDF 리더의 시작점인 문서 카탈로그에서 참조됩니다. 페이지 트리가 손상되면 리더는 더 이상 올바른 순서로 페이지를 탐색할 수 없지만 개별 페이지 개체는 일반적으로 손상되지 않은 상태로 유지됩니다. 즉, Repair PDF 작업을 통해 기존 페이지 개체에서 트리를 재구성할 수 있는 경우가 많습니다.
손상된 페이지 트리는 손상된 페이지 콘텐츠와 다릅니다. 각 페이지를 그리는 콘텐츠 스트림, 실제 텍스트, 이미지, 벡터 명령은 이를 구성하는 트리와 별도의 개체에 저장됩니다. 이러한 분리로 인해 수리가 가능해집니다. 깨진 트리를 버리고 여전히 손상되지 않은 페이지 콘텐츠 개체에서 새 트리를 만들 수 있습니다. 문제는 어떤 페이지 개체가 어떤 순서로 속하는지 정확하게 식별하는 것입니다. 이를 위해서는 원본 페이지 레이블이나 번호, 크기, 문서에서 의도한 위치를 암시하는 상호 참조 등 각 페이지 개체가 전달하는 메타데이터를 이해해야 합니다.

PDF 페이지 트리가 손상되는 원인은 무엇입니까?
페이지 트리 손상은 저장 작업이 실패하거나 중단되는 동안 가장 일반적으로 발생합니다. 업데이트된 파일을 디스크에 기록하는 동안 PDF 편집기가 충돌하는 경우 부분적으로 기록된 파일에는 일부 노드 참조가 완전히 기록되지 않은 페이지를 가리키거나 상위 노드의 페이지 수가 하위 노드의 페이지 합계와 일치하지 않는 페이지 트리가 포함될 수 있습니다. PDF 사양에서는 각 트리 노드에 해당 하위 트리의 총 리프 페이지 수를 기록하는 Count 항목이 포함되어야 합니다. 상위 개수와 하위 개수 간의 불일치는 일부 독자가 파일 열기를 거부하게 만드는 구조적 불일치입니다.
두 번째 일반적인 원인은 시간이 지남에 따라 누적되는 구조적 오류를 점진적으로 저장한다는 것입니다. PDF는 기존 내용을 다시 쓰지 않고 변경 사항을 파일 끝에 추가하는 증분 업데이트를 지원합니다. 각 증분 저장에는 페이지 트리 노드를 포함하여 수정된 개체의 새 버전이 추가됩니다. 증분 저장이 페이지 트리 노드를 잘못 수정하거나 서로 다른 도구를 사용한 여러 증분 저장이 제대로 상호 작용하지 않는 경우 누적된 페이지 트리가 내부적으로 일관성이 없게 될 수 있습니다. 법률 문서 아카이브의 손상된 PDF에 대한 2025년 분석에 따르면 페이지 순서 손상 사례의 28%가 서로 다른 PDF 편집 응용 프로그램 간의 증분 저장 충돌로 인해 추적될 수 있는 것으로 나타났습니다(Legal Tech Institute, "법률 아카이브의 문서 무결성", 2025).
세 번째 원인은 호환되지 않는 페이지 트리 구조를 가진 문서를 병합하는 것입니다. 병합 도구가 서로 다른 PDF의 페이지를 결합할 때 새로운 통합 페이지 트리를 구성해야 합니다. 병합 도구가 구조적 메타데이터를 잘못 처리하는 경우 결과 트리에는 중복된 페이지 참조, 고아 하위 트리 또는 잘못된 페이지 수가 포함될 수 있습니다. 각 페이지의 콘텐츠는 괜찮지만 이를 하나로 묶는 탐색 구조가 깨졌습니다. 가장 빠르거나 저렴한 옵션보다는 안정적인 구조 처리로 알려진 병합 도구를 선택하면 일상적인 문서 조립 중에 페이지 트리가 손상될 위험이 크게 줄어듭니다.
PDF 복구를 시도해보세요
설치가 필요하지 않습니다. 브라우저에서 직접 작동합니다.
페이지 트리 손상 유형 진단
수리를 시도하기 전에 어떤 종류의 손상을 다루고 있는지 확인하십시오. 16진수 편집기나 PDF 인식 텍스트 뷰어 등 원시 파일 구조를 표시할 수 있는 텍스트 편집기에서 PDF를 열고 트레일러 사전에서 /Root 항목을 찾습니다. /Root 항목은 문서 카탈로그를 가리키고, 카탈로그의 /Pages 항목은 페이지 트리의 루트를 가리킵니다. 참조 체인을 따라 각 노드의 /Kids 배열에 하위 노드에 대한 유효한 참조가 포함되어 있는지 확인하세요. 파일에 존재하지 않는 개체 번호를 가리키는 참조는 매달린 참조이며 콘텐츠가 누락되었음을 나타냅니다.
더 간단한 진단 접근 방식은 pdfinfo 또는 PDF 유효성 검사 라이브러리와 같은 명령줄 PDF 분석 도구를 사용하는 것입니다. 이러한 도구는 페이지 트리를 구문 분석하고 분리된 페이지, 잘못된 페이지 수, 손상된 참조 등의 구조적 오류를 보고합니다. 어떤 노드가 손상되었는지 정확히 알면 트리를 다시 작성하여 복구를 수행할 수 있는지 또는 하위 수준 추출 기술을 사용하여 파일에서 개별 페이지 개체를 복구해야 하는지 여부를 알 수 있습니다.
파일이 하나의 PDF 리더에서 열리지만 다른 리더에서는 열리지 않는 경우 손상은 여러 리더에서 허용되는 범위에 있을 수 있습니다. Adobe Acrobat은 일반적으로 라이트웨이트 리더보다 구조적 불일치에 더 관대합니다. 따라서 Acrobat에서는 작동하지만 브라우저 기반 뷰어에서는 작동하지 않는 파일은 작동하는 것처럼 보이더라도 복구 대상이 됩니다. 판독기 간의 이러한 불일치는 그 자체로 진단 신호입니다. 현재 판독기가 그 위에 종이를 사용하고 있더라도 파일에 구조적 문제가 있음을 확인합니다.
방법 1: 다시 저장하여 페이지 트리 재구성
가장 간단한 복구 방법은 손상된 PDF를 신뢰할 수 있는 PDF 편집기에서 열고 증분 저장이 아닌 전체 저장을 사용하여 새 파일로 저장하는 것입니다. 전체 저장은 전체 PDF 구조를 처음부터 다시 작성하므로 편집자는 읽을 수 있는 실제 페이지 개체를 기반으로 페이지 트리를 다시 작성해야 합니다. 편집기가 모든 페이지 콘텐츠 스트림을 성공적으로 구문 분석할 수 있으면 다시 작성된 트리는 내부적으로 일관성이 있습니다.
이 방법은 개별 페이지 개체가 손상되지 않고 손상이 트리 노드 자체로 제한되는 페이지 트리 손상에 적용됩니다. 일부 페이지 개체가 누락되거나 손상된 경우에는 작동하지 않습니다. 왜냐하면 편집기는 읽을 수 없는 페이지에 대한 트리 노드를 다시 작성할 수 없기 때문입니다. 전체 저장 방법이 실패하면 다른 편집기에서 파일을 열어보세요. 일부 편집자는 손상된 페이지 트리를 발견할 때 다른 편집자보다 더 공격적인 복구 논리를 사용하며, 편집자를 전환하면 성공적인 복구와 열리지 않는 파일 사이의 차이를 만들 수 있습니다.
WukongPDF는 저장 작업을 시도하기 전에 심층적인 구조적 검증을 수행하고 불일치가 감지되면 페이지 트리를 처음부터 다시 작성하여 PDF 페이지 복구를 처리합니다. 이 접근 방식은 다른 도구가 자동으로 보존하는 페이지 순서 손상을 포착하고 복구하여 모든 주요 PDF 리더에서 구조적 유효성 검사를 통과하는 파일을 생성합니다.
방법 2: 개별 페이지 추출 및 재조립
다시 저장을 통해 트리를 다시 구성하는 것이 작동하지 않는 경우 다음 접근 방식은 손상된 파일에서 각 페이지를 개별적으로 추출하고 올바른 순서로 다시 조립하는 것입니다. 이 방법은 페이지 트리를 완전히 우회하고 페이지 개체와 직접 작동합니다. 페이지 번호가 아닌 개체 번호로 특정 페이지를 추출할 수 있는 PDF 도구를 사용하십시오. 페이지 번호는 손상된 트리가 잘못 나타내는 것이기 때문입니다.
파일의 모든 페이지 개체 목록을 생성하는 것부터 시작합니다. 각 페이지 개체는 /Type 항목이 /Page로 설정된 사전입니다. 각 페이지 개체에서 콘텐츠 스트림을 추출하여 새 PDF 페이지로 렌더링합니다. 모든 페이지가 개별 파일로 추출되면 새로운 페이지 트리를 생성하는 병합 도구를 사용하여 올바른 순서로 병합합니다. 결과 파일에는 추출된 페이지에서 구축된 내부적으로 일관된 새로운 페이지 트리가 있습니다. 이 방법은 단순한 다시 저장보다 노동 집약적이지만 페이지 트리가 너무 손상되어 어떤 편집자가 파일을 정상적으로 열 수 없는 경우에도 작동합니다.
추출 접근 방식을 사용하면 각 페이지를 개별적으로 확인할 수도 있습니다. 추출된 각 페이지 파일을 열고 병합 단계에 공급하기 전에 콘텐츠가 완전하고 올바른지 확인하세요. 이 페이지별 유효성 검사는 대량 재저장으로 인해 가려질 수 있는 콘텐츠 손상을 포착하고, 재구성된 문서에 예상한 페이지가 올바른 순서로 정확하게 포함되어 있는지 확인합니다.
방법 3: 열리지 않는 파일에서 페이지 복구
PDF가 어떤 리더에서도 열리지 않는 경우에도 페이지 트리를 우회하고 원시 콘텐츠 스트림을 직접 읽는 하위 수준 도구를 사용하여 페이지 콘텐츠를 복구할 수 있습니다. qpdf 명령줄 도구는 객체 참조와 함께 --pages 플래그를 사용하여 손상된 파일에서 개별 페이지 객체를 추출할 수 있습니다. qpdf가 콘텐츠 스트림을 구문 분석할 수 있으면 유효한 페이지 트리를 사용하여 새 PDF에 쓸 수 있습니다.
심각하게 손상된 파일의 경우 pdf-parser.py 또는 16진수 편집기와 같은 도구를 사용하여 파일에서 스트림 개체를 수동으로 찾습니다. PDF 스트림 개체는 stream 키워드로 시작하고 그 뒤에 스트림 데이터가 오고 endstream 키워드로 끝납니다. 이러한 마커 사이의 데이터는 일반적으로 FlateDecode로 압축됩니다. zlib 라이브러리를 사용하여 압축을 풀면 새 PDF에 제공할 수 있는 원시 페이지 설명이 있습니다.
이 수준의 수동 복구는 시간이 많이 걸리며 일반적으로 백업이 없는 대체할 수 없는 문서용으로 예약되어 있습니다. 일상적인 문서의 경우 페이지 트리 손상에 대한 최선의 방어는 좋은 백업 전략입니다. 모든 중요한 PDF의 수정되지 않은 복사본을 보관하고, 손상이 발생하면 낮은 수준의 복구를 시도하기보다는 백업으로 되돌리고 최근 편집 내용을 다시 실행하세요. 백업 원칙에 소요되는 시간은 법의학적 파일 복구에 소요되는 시간보다 항상 적습니다.
워크플로에서 페이지 트리 손상 방지
가장 효과적인 예방 조치는 여러 도구로 편집할 PDF로 작업할 때 증분 저장을 방지하는 것입니다. 주요 편집 세션을 마칠 때마다 증분 저장보다는 전체 저장을 수행하십시오. 이는 모든 변경 사항을 깨끗한 파일 구조로 통합하고 구조적 불일치를 일으킬 수 있는 증분 업데이트의 누적을 제거합니다.
두 번째 예방 조치는 페이지 병합, 분할 또는 삽입을 포함하여 문서 구조를 수정하는 작업 후에 PDF의 유효성을 검사하는 것입니다. 파일을 배포하기 전에 PDF 유효성 검사 도구를 사용하여 구조적 오류를 확인하세요. 파일이 계속 열려 있고 잘못된 페이지 수 또는 느린 페이지 탐색과 같은 미묘한 증상만 표시되는 경우 페이지 트리 손상을 조기에 포착하는 것이 완전히 열 수 없게 된 파일을 복구하는 것보다 훨씬 쉽습니다.
장기간 보관할 PDF의 경우 PDF/A 형식으로 변환하세요. 이 경우 전체 구조를 다시 작성해야 하며 증분 저장이 금지됩니다. PDF/A 유효성 검사 프로세스는 일반 PDF에서 발견되지 않을 수 있는 페이지 트리 손상 및 기타 구조적 문제를 포착합니다. PDF/A 유효성 검사를 성공적으로 통과한 파일은 정의에 따라 구조적으로 건전한 페이지 트리를 갖습니다. 전체 저장 요구 사항으로 인해 변환으로 인해 파일 크기가 약간 증가할 수 있지만 구조적 안정성은 몇 년 이상 액세스할 수 있는 모든 문서에 대한 추가 저장 공간만큼 가치가 있습니다.
PDF 복구를 시도해보세요
설치가 필요하지 않습니다. 브라우저에서 직접 작동합니다.
