2

PDFファイルはこのような構造になっています(多かれ少なかれ、私のニーズを描くためだけに)

%Header containing PDF version and two characters that ensure PDF is read properly
//objects
//cross-reference table

ただし、上記のリストの最後の2つの要素の間にこのように形成されたテキストを追加すると%text、PDFが破損することはなく、PDFリーダーではその行は無視されます。私の知る限り、PDFの「%」はJavaの「//」と同じです。

この方法で、カスタムデータの一部をPDFに追加したいと思います。それは最善の方法ではないかもしれませんが、私にとっては最も簡単な方法です。後で変更するかもしれませんが、今はそれを使い続けたいと思います。

問題は、1つは、行がPDFの正しい場所に追加された場合、PDF自体が破損しないという私の仮定です。次に、これを実現するためにどのクラスとメソッドを使用する必要があるかを知りたいです。 。

私は通常のPDFから始めて、最終的に自分のデータで強化されたPDFにしたいと思っています。

4

1 に答える 1

3

上記のリストの最後の 2 つの要素の間にこのような形式のテキストを追加すると%text、PDF が破損することはなく、その行は PDF リーダーで無視されますよね?

違う!

まず、指定された PDF ファイル構造が不完全です (「ニーズを描く」場合でも)。要素が欠けていstartxrefます。

PDF ファイルの正しい (大まかな) 構造 (必要に応じて) では、次の 4 つの要素を考慮する必要があります。

  1. PDFヘッダー
  2. PDF 本文 (オブジェクト)
  3. PDF 外部参照テーブル
  4. PDFトレーラー

相互参照テーブルは、PDF ファイル内のすべてのオブジェクトを一覧表示する TOC (目次) の一種です。これらのオブジェクトは、ファイルの先頭から計算されたファイル バイト オフセット値を使用して、この TOC リストから検索されます。

そのため、PDF に何かを挿入する場合(PDF リーダーが無視すべきコメントであっても)、挿入されたコメントの後に続くすべてのオブジェクトについて、Xref テーブルのバイト オフセット値を調整する必要があります。

次に重要なのがトレーラstartxrefです。トレーラには、(最後の) xref セクションのファイル バイト オフセット値を保持するというエントリが含まれています。( PDF ファイルには 1 つだけでなく複数の xref セクションがあるため、最後の xref セクション。)

したがって、適合する PDF リーダーは、PDF ファイルを最後から読み始める必要があります。そこで、外部参照テーブルの場所を見つけます。次に、外部参照テーブルを読み取ることで、各オブジェクトを見つけます。

特別な場合 (すべての PDF オブジェクトの後、Xref テーブルの前にコメントを挿入したい場合)、startxrefキーワードで指定された数を調整する必要もあります: コメントが 55 文字 (改行文字を含む) の場合は、追加します。 55 を以前の値に戻せば問題ないはずです。

于 2012-09-11T12:08:01.370 に答える