ドキュメント · PDF ツールキット
ブラウザで PDF を結合すると内部で何が起こるか
· 仕組み
pdf ファイル形式 ブラウザ処理
PDF の結合はホッチキス留めのように見えますが、このツールは実際にはページ オブジェクト、フォント、画像をあるオブジェクト グラフから別のオブジェクト グラフにコピーし、新しい相互参照テーブルを作成します。この投稿では、ブラウザーのタブ内で行われるそのプロセスについて説明します。
そうでない定番 — 2 つの PDF を単純にバイトとして連結できない理由と、結合ツールで何を再構築する必要があるのか
2 つの PDF には、それぞれ独自のヘッダー、オブジェクト番号、ページ ツリー、および相互参照情報があります。最初のファイルの後に 2 番目のファイルのバイトを追加しても、そのページは最初のドキュメントのページ ツリーに追加されません。マージでは、独自のオブジェクトを指す参照を含む新しい PDF を書き込む必要があります。
各ファイルをメモリに読み取る - ブラウザがアップロードせずに File API を介して PDF をバイト配列としてロードする方法
ファイル ピッカーは、サーバー URL ではなく、ブラウザー ファイル オブジェクトを提供します。 PDF インターフェイスは、選択された各ファイルを file.arrayBuffer() で読み取り、Uint8Array バイトを処理操作に渡します。マージではファイルはアップロードされません。これは、Web サイトにアクセスしてもネットワーク リクエストが行われないという主張とは異なります。サイト自体を読み込むには接続が必要です。
オブジェクト グラフの解析 - ヘッダー、番号付きオブジェクト、ページ ツリー、およびパーサーが再構築する必要がある相互参照テーブル
PDF ライブラリは各ソース ドキュメントをロードし、そのページ インデックスを解決します。ページは、フォント、画像、グラフィックス状態など、ファイル内の他の場所にあるオブジェクトを参照します。相互参照セクションまたはストリームは、読者が間接オブジェクトを見つけるのに役立ちます。これは貼り合わせるページのリストではありません。入力が破損していたり暗号化されていると、解析ができなくなる可能性があります。
ページとそのリソースのコピー - ページ参照を示すすべてのフォント、画像、グラフィックスが一緒に移動する必要がある理由
この実装では、入力ごとに PDFDocument.create() を呼び出し、次に out.copyPages(source, source.getPageIndices()) を順番に呼び出し、コピーされた各ページを出力に追加します。ライブラリは、各ページに必要な参照構造を転送します。ビットマップのスクリーンショットは作成されません。すべての文書レベルの特徴がページとともに移動するとは考えないでください。
マージされたファイルを作成します。オブジェクトの番号を変更し、新しいページ ツリーと相互参照テーブルを構築して、ダウンロードを渡します。
ページを追加した後、ライブラリは新しい PDF バイト配列を保存します。そのライターは、元のファイルを連結するのではなく、オブジェクト参照とシリアル化を処理します。アプリケーションは結果をダウンロードとして提供します。これは新しいドキュメントであるため、バイト サイズは入力の合計と等しい必要はありません。
実用的な例 — 3 ページのカバーレターと 12 ページのスキャンされた契約書を結合し、結果のページ順序とサイズからわかること
オフィス管理者が最初に 3 ページのカバーレターを選択し、次に 12 ページの契約書を選択するとします。結果は、表紙 1 ~ 3 ページ、契約書 4 ~ 15 ページの 15 ページになるはずです。ファイルを送信する前に、最初と最後のページ、合計を確認してください。スキャンされた契約書のページには画像リソースが含まれているため、出力が大きくなる場合があります。
これでカバーされないもの — ブックマーク、フォーム フィールド、ドキュメント メタデータ。これらの処理はツール独自のルールに依存し、そのページに文書化されています。
ページのコピーでは、ブックマーク、フォーム フィールド、メタデータ、または署名の保存は保証されません。特に、構造を書き換えた後も暗号署名が有効なままであるとは決して想定しないでください。原本を保管し、法的署名要件を個別に確認してください。新しいファイルは署名されたオリジナルではありません。
要点 — マージは連結ではなく構造的な書き換えであり、PDF Toolkit はその書き換えをタブ内で実行し、ファイルはデバイスから離れることはありません
PDF の結合は構造の書き換えです。 PDF Toolkit は、タブ内で選択されたバイトを読み取り、選択されたファイルの順序でページをコピーし、新しいファイルを書き込みます。セッション中にローカル処理の境界を確認するには、マージ中にブラウザの [ネットワーク] パネルを調べます。 Web サイトのアセットのロードとドキュメントのアップロードを区別します。