PDF 복구

손상된 xref·잘린 PDF를 객체 스캔으로 재구성해 다시 열리게 복구

1파일 선택2설정3처리4저장

PDF를 선택하면 내용을 분석해 표시합니다.

파일은 이 브라우저에서만 처리됩니다. 서버에 업로드하지 않습니다.

손상된 xref·잘린 PDF를 객체 스캔으로 재구성해 다시 열리게 복구

다른 도구로 이어서 편집
작업 설정
진단 및 복구 설정

복구본은 교차 참조 표를 새로 쓴 파일이라 기존 전자서명은 무효가 됩니다. 원본은 따로 보관하세요.

암호화된 PDF는 먼저 암호를 해제하세요. 페이지 콘텐츠 중심으로 처리하며 목차·첨부·양식·서명 보존은 보장하지 않습니다. 원본을 보관하고 결과를 확인하세요.

PDF 복구 소개

PDF 파일은 앞에서부터 순서대로 읽는 문서가 아닙니다. 파일 끝에 있는 교차 참조 표(xref)가 「3번 객체는 1,204바이트 위치」처럼 각 객체의 주소를 알려 주고, 뷰어는 끝부분의 trailer에서 시작해 그 주소를 따라 필요한 객체로 건너뜁니다. 그래서 내용은 멀쩡한데 주소록만 틀려도 「파일이 손상되었습니다」가 뜹니다.

이 도구는 주소록을 믿지 않습니다. 파일 전체를 처음부터 끝까지 훑어 「번호 0 obj … endobj」로 둘러싸인 객체를 모두 다시 찾고, 그것으로 새 교차 참조 표를 만들어 씁니다. 저장한 뒤에는 PDF 엔진으로 다시 열어 페이지 수까지 확인합니다.

고칠 수 있는 손상

구조 정보만 틀리고 데이터 자체는 남아 있는 경우가 대상입니다. 실제로 가장 흔한 손상이기도 합니다.

  • 머리글 앞의 쓰레기 데이터: 메일 게이트웨이나 업로드 스크립트가 %PDF- 앞에 바이트를 붙이면 모든 오프셋이 그만큼 밀립니다. 앞부분을 잘라 내면 해결됩니다.
  • 틀린 xref 오프셋: 다른 프로그램이 파일을 고치고 표를 갱신하지 않았거나, 줄바꿈 변환(FTP 텍스트 모드 전송 등)으로 바이트 위치가 바뀐 경우입니다.
  • 틀린 스트림 길이(/Length): /Length가 endstream 위치와 맞지 않으면 endstream을 찾아 길이를 다시 잽니다.
  • trailer 누락: 마지막 trailer나 xref 스트림 사전에서 /Root를 찾고, 없으면 /Type /Catalog 객체를 검색해 문서의 시작점으로 씁니다.
  • 끊긴 페이지 트리: 존재하지 않는 페이지를 가리키는 항목을 지우고 /Parent·/Count를 바로잡으며, 트리가 없으면 파일에 있는 /Type /Page 객체를 순서대로 이어 새 트리를 만듭니다.

고칠 수 없는 손상

없어진 바이트는 되살릴 수 없습니다. 다운로드가 60%에서 끊겼다면 뒤 40%에 있던 객체는 파일 어디에도 없습니다. 페이지 객체가 남아 있어도 그 페이지의 콘텐츠 스트림이나 이미지가 잘린 부분에 있었다면 빈 페이지나 이미지 없는 페이지가 됩니다.

PDF 1.5부터는 여러 객체를 한 압축 스트림(ObjStm)에 넣을 수 있습니다. 그런 스트림이 중간에 잘리면 그 안의 객체 수십 개가 함께 사라집니다. 이 도구는 FlateDecode로 압축된 객체 스트림만 풀 수 있고, 다른 필터나 예측기를 쓴 것은 복구하지 못합니다.

암호화된 PDF는 객체 내용이 잠겨 있어 다루지 않습니다. 압축 데이터 내부가 깨진 경우(비트 오류)도 구조 복구로는 고칠 수 없습니다.

증분 저장과 「마지막 정의가 이긴다」

PDF는 수정 내용을 파일 끝에 덧붙이는 증분 저장을 허용합니다. 서명이나 주석을 추가하면 같은 번호의 객체가 파일에 두 번 이상 들어가고, 규격상 뒤에 나온 것이 유효합니다. 이 도구도 같은 번호가 여러 번 나오면 파일에서 마지막 정의를 씁니다.

이 규칙 때문에 복구 결과가 「가장 최근 저장 상태」가 됩니다. 마지막 증분 저장이 반쯤 쓰이다 멈춘 파일이라면, 잘린 객체는 버려지고 그 앞의 완전한 이전 정의가 남아 한 단계 전 상태가 보일 수 있습니다. 이전 버전 객체가 파일에 남아 있다는 것은 삭제했다고 생각한 내용이 복구 과정에서 보일 수도 있다는 뜻이기도 합니다.

예시

메일 첨부로 받은 열리지 않는 계약서

입력
진단: %PDF 앞 불필요한 데이터 16바이트, xref 오프셋 30개 중 30개 불일치
결과
앞 16바이트 제거, 객체 38개로 새 xref 작성, 12페이지 확인

모든 오프셋이 같은 양만큼 틀린 것은 앞에 무언가가 붙었다는 전형적인 신호입니다. 데이터 손실이 없으므로 원본과 동일한 문서가 됩니다.

다운로드가 중간에 끊긴 보고서

입력
20MB 중 12MB만 받은 파일, trailer 없음
결과
잘린 객체 폐기, 카탈로그 검색으로 루트 복원, 일부 페이지 빈칸

앞 12MB 안에 완전히 들어 있던 객체만 살아납니다. 이미지가 뒤쪽에 저장된 페이지는 빈 채로 열립니다. 원본을 다시 받을 수 있다면 그쪽이 확실한 해결책입니다.

트리에 연결되지 않은 페이지

입력
페이지 트리 10쪽, 파일 안 페이지 객체 12개
결과
옵션을 켜면 2쪽이 문서 끝에 추가

편집 중 삭제되었으나 증분 저장으로 흔적이 남은 페이지일 가능성이 큽니다. 붙여서 내용을 확인한 뒤 필요 없으면 빼면 됩니다.

사용 방법

  1. 열리지 않는 PDF를 넣고 진단 목록을 확인합니다.
  2. 트리에 연결되지 않은 페이지가 있으면 문서 끝에 붙일지 정합니다.
  3. 복구를 실행하고, 다시 열어 확인한 페이지 수와 미리보기를 본 뒤 PDF와 보고서를 받습니다.

주요 용어

교차 참조 표(xref)
각 객체가 파일의 몇 번째 바이트에서 시작하는지 적은 목록입니다. PDF 1.5부터는 압축된 xref 스트림으로 저장할 수도 있습니다.
증분 저장
파일 전체를 다시 쓰지 않고 바뀐 객체와 새 xref를 끝에 덧붙이는 저장 방식입니다.

자주 묻는 질문

손상된 PDF 복구하면 원래대로 돌아오나요?

주소 정보만 틀린 경우는 원래와 같아집니다. 잘려 나간 데이터가 있으면 그 부분은 돌아오지 않습니다.

한 뷰어에서는 열리고 다른 뷰어에서는 안 열려요.

뷰어마다 손상 허용 범위가 다릅니다. 너그러운 뷰어는 내부적으로 비슷한 재스캔을 하므로, 이 도구로 xref를 새로 쓰면 까다로운 뷰어에서도 열리는 경우가 많습니다.

복구한 파일의 서명은 유효한가요?

아닙니다. 파일을 새로 쓰므로 전자서명은 무효가 됩니다. 서명 검증이 필요하면 원본을 보내 준 쪽에 다시 요청하세요.

페이지 순서가 바뀔 수 있나요?

트리가 정상이면 원래 순서를 지킵니다. 트리를 새로 만들 때만 파일에 저장된 순서를 따르므로 바뀔 수 있습니다.

출처

기준일:

개인정보와 저장 방식