PDF を開いてもページが間違った順序で表示される場合、内部ページ ツリーが破損しています。ページ自体は無傷です。各ページのテキスト、画像、ベクター グラフィックスは正しくレンダリングされます。問題は、ページ ツリーとして知られるドキュメントのページの目次がスクランブルされているため、閲覧者が 3 ページを要求すると 7 ページを読むか、間に何もないまま 12 ページから 41 ページにジャンプしてしまうことです。これは PDF ファイル形式の最も基本的なデータ構造の 1 つにおける構造上のエラーであり、憂慮すべきことのように見えますが、多くの場合、ページのコンテンツを失うことなく修復できます。
ページ ツリーは、すべての PDF がページを整理するために使用する階層データ構造です。 PDF 仕様では、ページをフラット リストに保存するのではなく、ページ ノードのツリーに編成し、単一のドキュメントで数千ページを効率的に参照できるようにしています。ツリー内の各リーフ ノードは単一のページ オブジェクトを参照し、各ページ オブジェクトにはそのページのコンテンツ ストリームが含まれます。ページ ツリーのルートは、すべての PDF リーダーの開始点であるドキュメント カタログから参照されます。ページ ツリーが破損すると、リーダーは正しい順序でページを移動できなくなりますが、通常、個々のページ オブジェクトは損傷を受けません。これは、Repair PDF 操作により、多くの場合、既存のページ オブジェクトからツリーを再構築できることを意味します。
破損したページ ツリーは、破損したページ コンテンツと同じではありません。コンテンツ ストリーム、実際のテキスト、画像、各ページを描画するベクトル コマンドは、それらを構成するツリーとは別のオブジェクトに保存されます。この分離により修復が可能になります。壊れたツリーを破棄し、まだ完全なページ コンテンツ オブジェクトから新しいツリーを構築できます。課題は、どのページ オブジェクトがどの順序に属しているかを正確に識別することであり、そのためには、元のページ ラベルやページ番号、サイズ、文書内の意図された位置を示唆する相互参照など、各ページ オブジェクトが持つメタデータを理解する必要があります。

PDF ページ ツリーが破損する原因は何ですか?
ページ ツリーの破損は、保存操作が失敗したり中断されたときに最も一般的に発生します。更新されたファイルをディスクに書き込んでいるときに PDF エディターがクラッシュした場合、部分的に書き込まれたファイルには、一部のノード参照が完全には書き込まれなかったページを指しているページ ツリーが含まれているか、親ノードのページ数が子のページの合計と一致していないページ ツリーが含まれている可能性があります。 PDF 仕様では、各ツリー ノードに、そのサブツリー内のリーフ ページの総数を記録する Count エントリが含まれることが必要です。親のカウントと子のカウントの不一致は構造的な矛盾であり、一部の読み取り者がファイルを開くことを拒否する原因になります。
2 番目の一般的な原因は、増分保存により時間の経過とともに蓄積される構造エラーです。 PDF は増分更新をサポートしており、既存のコンテンツを書き換えることなく変更がファイルの末尾に追加されます。増分保存するたびに、ページ ツリー ノードを含む、変更されたオブジェクトの新しいバージョンが追加されます。増分保存によってページ ツリー ノードが誤って変更される場合、または異なるツールによる複数の増分保存の相互作用が不十分な場合、蓄積されたページ ツリーは内部的に不整合になる可能性があります。法的文書アーカイブ内の破損した PDF の 2025 年の分析では、ページ順序の破損ケースの 28 パーセントが、異なる PDF 編集アプリケーション間の増分保存の競合に追跡可能であることがわかりました (Legal Tech Institute、「法的アーカイブにおける文書の整合性」、2025 年)。
3 番目の原因は、互換性のないページ ツリー構造を持つドキュメントをマージすることです。結合ツールが異なる PDF のページを結合する場合、新しい統合されたページ ツリーを構築する必要があります。マージ ツールが構造メタデータを誤って処理すると、結果のツリーに重複したページ参照、孤立したサブツリー、または誤ったページ数が含まれる可能性があります。各ページのコンテンツは問題ありませんが、それらを結び付けるナビゲーション構造が壊れています。最速または最も安価なオプションではなく、信頼性の高い構造処理で知られるマージ ツールを選択すると、日常的なドキュメントのアセンブリ中にページ ツリーの破損が発生するリスクが大幅に軽減されます。
PDFを修復してみる
インストールは必要ありません。ブラウザで直接動作します。
ページ ツリー破損の種類の診断
修復を試みる前に、どのような種類の破損が発生しているのかを確認してください。 16 進エディターや PDF 対応テキスト ビューアーなど、生のファイル構造を表示できるテキスト エディターで PDF を開き、トレーラー ディクショナリで /Root エントリを探します。 /Root エントリはドキュメント カタログを指し、カタログの /Pages エントリはページ ツリーのルートを指します。参照チェーンをたどって、各ノードの /Kids 配列にその子ノードへの有効な参照が含まれているかどうかを確認します。ファイル内に存在しないオブジェクト番号を指す参照はダングリング参照であり、コンテンツが欠落していることを示します。
より簡単な診断アプローチは、pdfinfo や PDF 検証ライブラリなどのコマンド ライン PDF 分析ツールを使用することです。これらのツールはページ ツリーを解析し、孤立したページ、不正なページ数、壊れた参照などの構造エラーを報告します。どのノードが破損しているかを正確に知ることで、ツリーを再構築することで修復できるかどうか、または低レベルの抽出技術を使用してファイルから個々のページ オブジェクトを回復する必要があるかどうかがわかります。
ファイルが 1 つの 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 を操作するときに増分保存を避けることです。大規模な編集セッションを終了するたびに、増分保存ではなく完全保存を実行します。これにより、すべての変更がクリーンなファイル構造に統合され、構造的な不整合を引き起こす可能性のある増分更新の蓄積が排除されます。
2 番目の防止策は、ページの結合、分割、挿入など、文書構造を変更する操作の後に PDF を検証することです。ファイルを配布する前に、PDF 検証ツールを使用して構造上のエラーがないかチェックしてください。ファイルがまだ開いていて、ページ数が正しくない、ページ ナビゲーションが遅いなどの微妙な症状しか示されていない場合、ページ ツリーの破損を早期に発見することは、完全に開けなくなったファイルを回復するよりもはるかに簡単です。
長期間アーカイブされる PDF の場合は、PDF/A 形式に変換します。これには完全な構造の書き換えが必要であり、増分保存が禁止されます。 PDF/A 検証プロセスは、通常の PDF では気づかれない可能性のあるページ ツリーの破損やその他の構造上の問題を検出します。 PDF/A 検証に合格したファイルには、定義上、構造的に健全なページ ツリーがあります。完全に保存する必要があるため、変換によりファイル サイズがわずかに増加する可能性がありますが、得られる構造的信頼性は、数年以上アクセス可能な状態を維持する予定のドキュメントを保存するのに十分な価値があります。
PDFを修復してみる
インストールは必要ありません。ブラウザで直接動作します。
