PDF修復
破損・途中で切れたPDFを再構成して修復
ファイルはこのブラウザ内でのみ処理されます。サーバーにはアップロードされません。
壊れたxrefや途中で切れたPDFをオブジェクトのスキャンで再構成し、開けるように修復
パスワード付きのPDFです。
別のツールで続ける
処理しています…
すべての処理はこのブラウザ内で行われます。ファイルがサーバーに送信されることはありません。
ダウンロードするファイルの準備ができました
この結果で編集を続ける
ページプレビューを開く
設定を変えると前の結果は隠れます。もう一度作成して最新の設定で保存してください。
暗号化されたPDFは先にパスワードを解除してください。ページの内容を中心に処理するため、しおり・添付・フォーム・署名の保持は保証されません。原本を保管し、結果をご確認ください。
処理中…
0.0
停止していません。計算が終わると結果が表示されます。
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は変更をファイル末尾に追記する増分保存を認めています。署名や注釈を加えると同じ番号のオブジェクトが2回以上入り、仕様上は後のものが有効です。このツールも同じ番号が複数あればファイル内で最後の定義を使います。
そのため復旧結果は「最後に保存した状態」になります。最後の増分保存が途中で止まったファイルなら、切れたオブジェクトは捨てられ、その前の完全な定義が残って一つ前の状態が見えることがあります。古い版のオブジェクトがファイルに残っているということは、削除したつもりの内容が復旧で見えてしまう可能性もあるということです。
例
メール添付で届いた開けない契約書
- 入力
診断:%PDFの前に不要なデータ16バイト、xrefオフセット30件中30件が不一致- 結果
先頭16バイトを削除、38オブジェクトで新しいxrefを作成、12ページを確認
すべてのオフセットが同じ量だけずれているのは、先頭に何かが付いた典型的なサインです。データの欠損はないので元と同じ文書になります。
ダウンロードが途中で切れた報告書
- 入力
20MBのうち12MBだけ受信、trailerなし- 結果
切れたオブジェクトを破棄、カタログ検索でルートを復元、一部のページは白紙
先頭12MBに完全に収まっていたオブジェクトだけが生き残ります。画像が後ろに保存されていたページは白紙で開きます。元のファイルを再取得できるなら、それが確実な解決策です。
ツリーにつながっていないページ
- 入力
ページツリーは10ページ、ファイル内のページオブジェクトは12個- 結果
オプションをオンにすると2ページが末尾に追加
編集中に削除されたものの増分保存で痕跡が残ったページである可能性が高いです。付けて中身を確認し、不要なら外します。
使い方
- 開けないPDFを選び、診断リストを確認します。
- ツリーにつながっていないページがあれば、末尾に付けるかを決めます。
- 修復を実行し、開き直して確認したページ数とプレビューを見てから、PDFとレポートをダウンロードします。
主な用語
- 相互参照表(xref)
- 各オブジェクトがファイルの何バイト目から始まるかを記した一覧です。PDF 1.5からは圧縮されたxrefストリームとしても保存できます。
- 増分保存
- ファイル全体を書き直さず、変わったオブジェクトと新しいxrefを末尾に追記する保存方法です。
よくある質問
壊れたPDFを修復すると元どおりになりますか?
位置情報だけが間違っていた場合は元と同じになります。切れて失われたデータは戻りません。
あるビューアーでは開けて、別のビューアーでは開けません。
ビューアーごとに破損への寛容さが違います。寛容なビューアーは内部で似た再走査をしているので、このツールでxrefを書き直すと厳しいビューアーでも開けることが多いです。
修復したファイルの署名は有効ですか?
無効です。ファイルを書き直すため電子署名は無効になります。検証できる署名が必要なら送り主に再送を依頼してください。
ページの順番が変わることはありますか?
ツリーが正常なら元の順番を保ちます。ツリーを作り直すときだけファイル内の順番に従うため、変わることがあります。
出典
- Adobe — PDF 1.7 / ISO 32000-1:2008, 7.5 File structure (xref, trailer, incremental updates, object streams)
- PDF Association — ISO 32000 (PDF) resources
- PDF Association — Preparing for PDF files from the future
- pdf-lib — PDFDocument
基準日: