ガイド

「The file is damaged and could not be repaired」— 壊れた PDF を直す

Acrobat が PDF を修復できなかったと言うとき、それはたいてい、ファイルのインデックスが転送中に破損したか切り落とされたという意味であって、中のページが失われたわけではありません。そして、そのインデックスを再構築すれば、文書はしばしば再び開きます。

正確なエラー文と、Adobe の言い回しに潜む皮肉

Adobe Acrobat と Reader は、PDF が開かないとき、次の文言をそのまま表示します:

There was an error opening this document. The file is damaged and could not be repaired.

Chrome の組み込みビューアは、同じ失敗をもっとそっけなく述べます:

Failed to load PDF document.

Adobe の一文をよく読んでください。この言い回しは、多くの人を諦めさせる ように誤解させるからです。ファイルは修復できないとは言っていません。Acrobat が修復できなかった、と言っているのです。Acrobat には、 壊れた PDF に出会うと自動的に走る組み込みの修復パスがあり、それは保守的 です――単純な問題は扱いますが、それより難しいものはすべて投げ出します。 投げ出すとき、そのファイルを損傷しており自前の修復の手に負えないと報告 しますが、それは Acrobat の努力についての言明であって、ファイルの実際の 復元可能性についてのものではありません。このメッセージを引き起こす PDF の 多くは、より徹底した構造の再構築のあとで問題なく開きます。

xref テーブルは PDF のインデックス

PDF は番号のついたオブジェクトから構成されています。各ページ、 フォント、画像、テキストのブロックは、ファイルのどこかに保存されたオブジェクト です。それらを素早く見つけるために、PDF はファイルの末尾近くにクロスリファレンステーブル、すなわち xref を持っています。 xref は、すべてのオブジェクトの正確なバイトオフセットを記録した検索リストで、 そのすぐ後ろには、リーダーを xref と文書のルートへ導く小さなトレーラーが 置かれています。PDF を開くと、リーダーは末尾へ飛び、トレーラーを読み、xref を 読み、それらのオフセットを使って他のすべてを見つけ出します。

PDF はまずページオブジェクトを保存し、それらの位置を示す xref インデックスを末尾近くに置きます。xref が壊れるとリーダーはページを見つけられませんが、ページ自体はそこにあります。

この設計は、動画のインデックスや ZIP のディレクトリと同じ話です。大きな データ本体を使う前にリーダーが必要とする、末尾の小さな地図。そして同じ帰結を もたらします。xref が壊れていたり、間違ったオフセットを指していたり、まるごと 切り落とされていたりすると、ページがファイルの中に無傷で収まっていても、 リーダーはオブジェクトを一つも見つけられません。文書は使えませんが、内容は 失われてはいません――ただインデックスがないだけです。その「使えない」と 「失われた」の隔たりこそが、修復の生きる場所です。

壊れたダウンロードが PDF 全体を壊す理由

最も多く起きる不具合は2つあり、どちらもオブジェクトを無傷のまま残しつつ インデックスを壊します。1つ目は切り詰め(truncation)です。PDF は、たいていの ファイルと同じく先頭から末尾へと転送されるため、途中で止まったダウンロード、 途中で終了したクラウド同期、コピー中に抜かれたドライブは、ファイルの前半だけを 手元に残し、切れ目の後ろには何も残しません。xref とトレーラーは末尾にあるので、 切り詰めはそれらを真っ先に取り除き、前方にあるページオブジェクトは生き残ります。 サイズをざっと確認すればすぐわかります――4 MB あるはずの契約書が 2.6 MB で 届いていれば切り詰められており、欠けたバイトは壊れているのではなく、単に 存在しないのです。

2つ目は、転送中の破損です。PDF はバイナリデータとテキストのような構造の混在で、 途中でバイトを書き換える転送――行末を「直す」メールゲートウェイ、ファイルを テキストとして扱うツール、特定の文字を壊すエンコード処理――は、オブジェクトの 実際の位置をずらし、xref が記録したオフセットと合わなくしてしまいます。xref は 今や、各オブジェクトが実際にある位置から数バイトずれたところを指しており、その 古いポインタをたどるリーダーはゴミを見つけ、ファイルを損傷していると宣言します。

どちらのケースも修復の順番は同じです。切り詰められた、あるいは破損したファイルに 対する最も確実な修復は、欠けたり変わったりしたバイトのきれいなコピーだからこそ、 まずはファイルを元のソースからダウンロードし直すか、コピーし直してください。 安定した接続でもう一度取得するか、そのファイルが来たデバイスやドライブから直接 引き出して、新しいコピーを開いてください。きれいなダウンロードは文書全体を一度に 直しますが、修復はあなたが今持っているものの周りを組み立て直すことしかできません。 ですから、何よりも先に元のソースを試す2分は、いつでも費やす価値があります。

xref を再構築する

きれいなコピーが手に入らないとき、修復とはインデックスを組み立て直すことです。 すべての PDF オブジェクトは、ファイル内に見分けのつくマーカーを持っているため、 修復ツールは壊れた xref をまるごと無視して、ファイルを先頭から走査し、生き残った 各オブジェクトを見つけ、それが本当にある位置を書き留められます。その走査から、 新しい正しいクロスリファレンステーブルと、それに対応するトレーラーを組み立て、 インデックスが実際にオブジェクトを指す新しい PDF を書き出します。再構築された ファイルを開くリーダーは、新しい xref をたどり、テーブルが言うとおりの位置に すべてのオブジェクトを見つけ、文書を描画します。

これはまさに、Acrobat 自身の修復パスが試みて、しばしば途中で投げ出す作業を、 より徹底して行うものです。オブジェクトが生き残り、壊れているのがインデックス だけのとき――このエラーの背後にある一般的なケースです――再構築は文書を完全に 復元します。適切に行えば非破壊的でもあります。ツールは壊れたファイルを読み、 新しいファイルを書き出すので、失敗した試みでも元ファイルはそっくりそのまま残り、 試すのに何のコストもかかりません。

再構築で足りないとき

xref の再構築は、壊れたインデックスの裏でオブジェクトが無傷な文書を復元します。 ファイルに存在しない内容を生み出すことはできず、どんな修復でも手の届かない 状況がいくつかあります。それらをはっきり名指しするほうが、約束よりも役に 立ちます:

  • オブジェクトそのものが失われている場合。切り詰めが ファイルの一部を切り落としたなら、取り除かれた部分にあったページは 失われています。再構築は切れ目までに生き残ったオブジェクトを復元し、 文書は丸ごとではなく欠けた状態で戻ってきます。バイトがもう存在しない 場所に、インデックスをつけるものは何もありません。
  • PDF が暗号化されていて、パスワードがない場合。パスワード 保護された PDF は内容を暗号化して保存します。構造は再構築できますが、 ページは暗号化されたままなので、パスワードがなければ復元したファイルは やはり読めません。修復は暗号化を回避しませんし、回避すべきでもありません。
  • ページが壊れた、スキャン画像の PDF の場合。スキャン文書は、 要するに1ページにつき1枚の画像を PDF で包んだものです。復元はページ単位で 行われます。画像データが生き残ったページはきれいに戻り、画像データが 切り詰められたり上書きされたりしたページは戻りません。圧縮された画像の内部 には再構築の元にできる冗長性がないからです。全ページが部分的にぼやけるので はなく、いくつかのページは戻り、いくつかは欠ける、と考えてください。
  • ファイルがほぼ空の場合。数メガバイトの原本が数キロバイトに なって戻ってきた PDF や、ほとんどゼロとして読める PDF には、インデックスを つけるべき本物のオブジェクトがありません。それはダウンロードや復旧の問題で あって、修復の問題ではありません。

こうしたケースを除けば、Acrobat が損傷しており修復できないと言った PDF は、 しばしば素直なインデックスの再構築で済みます。このエラーは、領土そのものよりも、 地図についてのものであることのほうがはるかに多いからです。

よくある質問

「the file is damaged and could not be repaired」とはどういう意味ですか?

これは、Adobe Acrobat または Reader が、PDF の構造が壊れていることを検知し、自前の組み込み修復も失敗した、という意味です。この文言は注意深く読む価値があります――ファイルは修復できないとは言っておらず、Acrobat が修復できなかった、と言っているのです。最も多い原因は、クロスリファレンステーブル――文書内の各オブジェクトがどこにあるかをリーダーに教えるインデックス――が壊れているか、切り詰められていることです。Acrobat は不正なインデックスに対してすぐに諦めますが、ページの内容そのものはたいていまだ存在していて、そのインデックスを再構築すれば到達できます。

「damaged and could not be repaired」と言われる PDF はどう直せばいいですか?

まず、ファイルを元のソースからダウンロードし直すか、コピーし直すことから始めてください。切り詰められたダウンロードには欠けたバイトがあり、それはローカルのどんな修正でも取り戻せないからです。きれいなコピーが手に入らない場合、次の手順は PDF のクロスリファレンステーブルを再構築することです。修復ツールが生き残ったオブジェクトを求めてファイルを走査し、それらを指す有効なインデックスを組み立て直すことで、リーダーが再び文書を開けるようになります。これはオブジェクトが無傷で、壊れているのがインデックスだけの場合に有効で、このエラーの背後にある通常の状況がまさにそれです。

なぜ Chrome は「Failed to load PDF document」と表示するのですか?

Chrome の組み込み PDF ビューアは、ファイルの構造を描画できるほど十分に解析できないときにそのメッセージを表示します。これは Acrobat の損傷ファイルエラーに相当する Chrome 版で、同じ根本的な問題――壊れた、あるいは不完全な PDF 構造、多くは切り詰められたダウンロード――を指しています。ファイルが壊れていると決めつける前に、もう一度ダウンロードしてみて、別のリーダーで開いてみてください。ビューアによって、耐えられる構造的損傷の度合いは異なるからです。

壊れた PDF は Adobe なしで修復できますか?

できます。PDF の構造はよく文書化されているため、クロスリファレンステーブルの再構築に Adobe のソフトウェアは必要ありません。専用の修復ツールが有効なオブジェクトを求めてファイルを走査し、それらを指すインデックスを組み立て直します――これがまさに、Acrobat が修復できないと言った文書を復元する処理です。ページに到達するのに Acrobat のインストールは不要ですが、復元した結果を表示するには何らかの PDF リーダーが欲しくなるでしょう。

暗号化された PDF は修復できますか?

構造は再構築できますが、内容は暗号化されたままです。パスワード保護された PDF はページを暗号化データとして保存しており、ファイルのインデックスを修復してもそれらは復号されません。パスワードがあれば、修復したファイルを開いて普通に読めます。パスワードがなければ、復元したオブジェクトは読めないままです。修復はあくまで内容を包むコンテナを直すのであって、暗号化を解除したり回避したりはしません。これは仕様どおりの動作です。

PDF は契約書、身分証、診療記録であることが多いので、ファイルがどこで処理される かは重要です:ブラウザ内で修復、アップロードは一切なし。