"The file is damaged and could not be repaired"

このメッセージは、Acrobat がすでに自前の復元を試みてあきらめたことを意味します。多くの場合、PDF のクロスリファレンステーブル — Acrobat がファイルの末尾から読み取る地図 — が壊れているか切り詰められているためです。ページのオブジェクトはたいていまだ内部に残っており、より踏み込んだ再構築ならそこへ到達できます。そしてそれは、機密文書をアップロードすることを決して意味しません。

ファイルがデバイスから出ることはありません — 修復はブラウザ内で実行されます。アップロードは 0 バイトです。

Your data is the big block — usually intact. What breaks is the small index. Repair rebuilds it.

Drop a file here or browseTap to choose a file

ZIP · Office · PDF · video · JPG · PNG · RAR/7z · SQLite — repaired right here in your browser. Nothing is uploaded

0 bytes uploadedFree: 3 repairs/day — up to 500 MB video, 100 MB docs & archives, 50 MB photos. Free download. Single repair €5.90. No account required.

今すぐ修復

  1. ファイルをドロップ
  2. 修復はローカルで実行
  3. 結果をダウンロード

Acrobat や Reader が "There was an error opening this document. The file is damaged and could not be repaired,"(このドキュメントを開くときにエラーが発生しました。ファイルが破損しており修復できませんでした)と表示するとき、それは一般的な不満ではありません。Acrobat はすでに自前の静かな復元を試みて失敗しているのです。PDF は末尾から読み取られ、その末尾の構造こそ、失敗した保存や中断したダウンロードが真っ先に破壊するものです。上にファイルをドロップすると、ツールはブラウザ内で PDF の実際のオブジェクト構造を解析し、見つけられたオブジェクトからクロスリファレンステーブルを再構築し、ちゃんと開くファイルを組み立て直します — 文書があなたの端末から外に出ることは決してありません。

PDF は末尾から読み取られる — だからこそこう壊れる

PDF は上から下へ読み進めるストリームではありません。%PDF-1.7 のようなヘッダーで始まり、続いて番号付きオブジェクトの本体(それぞれ N 0 objendobj と書かれる)が並び、ページ・フォント・画像・内容を保持します。本体のあとにクロスリファレンステーブルxref)が来ます。これはすべてのオブジェクトの正確なバイトオフセットの一覧です。そのあと trailer が文書のルートを指し示し、そして何より重要なことに、ファイルは startxref に続くバイトオフセットと %%EOF マーカーで終わります。

ファイルを開くために、リーダーはまず末尾へ移動し、startxref を読んで xref がどこにあるかを知り、そこへジャンプし、オフセットを使ってルートを見つけページを読み込みます。すべては、その trailer が無傷でオフセットが正しいことにかかっています。PDF 1.5 以降では、この地図を圧縮されたクロスリファレンスストリームとして保存し、多数のオブジェクトをオブジェクトストリームObjStm)にまとめて詰め込むこともできます。より効率的ですが、それは末尾にある 1 つの壊れたストリームが、一度に非常に多くのオブジェクトを覆い隠しかねないことを意味します。

インデックスと trailer がまさに末尾にあるため、保存が中断されたり、ダウンロードが切り詰められたり、増分更新(incremental update)が正しく書けなかったりしたときに、真っ先に犠牲になります。だからこそ「破損した」PDF は、ページの内容は完璧なのにそこへ至る地図が壊れている、ということがこれほど多いのです。

なぜ Acrobat 自身の修復があきらめるのか

Acrobat は通常、壊れた xref を静かに再構築します。オフセットの辻褄が合わなければ、ファイルを走査して obj マーカーを探し、何も告げずにテーブルを作り直します。ですから "could not be repaired"(修復できませんでした)は、その予備の仕組みまで失敗したことを意味します — 損傷が、Acrobat の再構築処理が許容できる範囲を超えたのです。よくある原因は次のとおりです。

末尾が切り詰められた。 途中で止まったダウンロードやコピーは、xreftrailerstartxref%%EOF をまるごと失い、場合によっては最後のオブジェクトまで失います。増分更新の失敗。 PDF は多くの場合、末尾に新しい xref セクションと trailer を追記することで編集されます。その追記が壊れていると、更新の連鎖が誤った場所を指します。クロスリファレンスストリームやオブジェクトストリームの損傷。 地図そのものが圧縮ストリームで、そのストリームが壊れていると、Acrobat はその中に詰め込まれたオブジェクトを見失うことがあります。転送中のバイトの改変 — 改行コードを変えてしまったテキストモード転送や、バイトを反転させた同期 — もまた、何も噛み合わなくなるまでオフセットを狂わせることがあります。

どの場合も、有用な洞察は同じです。あなたのページを構成するオブジェクトは本体の中にたいてい今も残っており、壊れているのはそこへ至るディレクトリのほうなのです。

より踏み込んだ再構築が取り戻すもの — そしてなぜアップロードしないのか

壊れた trailer を当てにする代わりに、ツールはファイル全体を走査して obj の定義を探し、それぞれが実際にどこで始まるかを記録し、その本当の位置からクロスリファレンステーブルを再構築します。続いて文書のルートとページツリーを張り直し、リーダーが再びページをたどれるようにしつつ、その過程でコンテンツストリーム、埋め込みフォント、画像を救い出します。地図が生き残った圧縮クロスリファレンスストリームやオブジェクトストリームの中にあった場合は、それらも読み取ります。末尾が切り詰められていた場合は、切断より前に書き込まれたすべてのオブジェクトを復元し、それらを囲む有効な PDF を組み立てます。これはすべてあなたのブラウザタブの中だけで実行されます — Acrobat も、アドインも、サーバーへの往復もありません。

正直な限界について。そもそも書き込まれなかった内容は復元できません。ですからファイルが切り詰められていた場合、まだ保存されていなかったページは失われています — 得られるのは切断点までのページです。あなたのページが依存する特定のオブジェクトが損傷領域に入り込んでいた場合、そのページは不完全な状態で戻ることがあります。そして 暗号化されパスワードで保護された PDF は、パスワードがなければ再構築できません。復号するまでオブジェクトが読めないからです。修復が保証するのはプライバシーです。契約書、診療記録、明細書、未公開の作品は、ディスクから読み込まれローカルで組み立て直されます。Network タブ(ネットワークタブ)を見張れば、文書のバイトが 1 バイトたりとも端末の外に出ていないことを確認できます。

修復できるものとできないもの

修復できる

  • xref / trailer / startxref が損傷または切り詰められた PDF — テーブルは obj 定義を走査して再構築されます
  • 中断されたダウンロードやコピーで切り詰められたファイル — 切断より前に書き込まれたすべてのオブジェクトを復元します
  • 増分更新の失敗、または壊れたクロスリファレンス/オブジェクトストリームによって壊れた文書
  • Acrobat が開いた途端にファイルは破損して修復できないと言うが、ページのオブジェクトは生き残っている PDF

修復できない

  • 切り詰めのあとにそもそも書き込まれなかったページやオブジェクト — それらのバイトはあなたのディスク上にありません
  • パスワードで暗号化された PDF(パスワードなし)— 復号するまでオブジェクトを読めません
  • 0 バイトのファイル、または認識できる PDF オブジェクトを含まないファイル
  • 損傷領域に入り込んだ特定のオブジェクトに依存するページ(不完全な状態で戻ることがあります)

修復が失敗した場合、その理由(データの欠落か構造の破損か)をお伝えします。失敗した修復に料金が請求されることはありません。

よくある質問

Acrobat がファイルは破損しており修復できないと言います。本当にもうダメなのですか?

多くの場合そうではありません。あのメッセージは、Acrobat 自身の静かな xref 再構築が失敗したという意味であって、内容が破壊されたという意味ではありません。ページのオブジェクトはファイル本体の中にたいてい今も残っています — 壊れているのは末尾にあるクロスリファレンステーブルと trailer です。存在するオブジェクトからそのテーブルを再構築すれば、たいてい文書はまた開きます。

なぜ PDF はよりによって末尾で壊れるのですか?

PDF は末尾から読み取られます。リーダーは startxref%%EOF を使って xref テーブルを見つけ、続いてオフセットを使ってページを読み込みます。これらの構造はまさに末端にあるため、中断された保存やダウンロードが真っ先にそれらを破壊し、壊れた地図の向こうに無事なページが取り残されます。

問題なかったのに、クラウド同期や転送で壊れました。何が起きたのですか?

中断された転送はファイルを切り詰める(trailer とインデックスを取り除く)ことがあり、テキストモードの転送はバイトを改変してオフセットがもう噛み合わなくなることがあります。いずれの場合も、本体の大部分が生き残る一方で地図が壊れます。ですから、オブジェクトの本当の位置からテーブルを作り直す再構築なら、ページを復元できます。

私の PDF は修復のためにアップロードされますか?

いいえ。文書はあなたのディスクから読み込まれ、あなたのブラウザタブの中で再構築されます。何も送信されません。Network タブ(ネットワークタブ)を開けば、0 バイトしか端末の外に出ていないことを確認できます — 他人のサーバーにコピーされたくない契約書、記録、下書きにとって、これは重要なことです。

関連: PDF を修復する · Excel ブックを修復する · アップロードゼロの主張を検証する