質問

私はPDFパーサー/ライターを開発していますが、クロスリファレンスストリームの生成に固執しています。私のプログラムは読みます これ 次に、線形化を削除し、オブジェクトストリーム内のすべてのオブジェクトを減圧します。最後に、PDFファイルを構築して保存します。

あなたが見ることができるように、これは私が通常のクロスリファレンスとトレーラーを使用するときに非常にうまく機能します これ ファイル。

代わりにクロスリファレンスストリームオブジェクトを生成しようとすると( これ ファイル、Adobe Readerは表示できません。

誰かがPDFを経験し、問題が何であるかを検索するのに役立ちますか?

相互参照は、ファイル2とファイル3の唯一の違いであることに注意してください。最初の34127バイトは同じです。

誰かがデコードされたリファレンスストリームのコンテンツが必要な場合は、ダウンロードしてください これ HEXエディターにファイルして開きます。この参照テーブルを何度もチェックしましたが、何も悪いことを見つけることができませんでした。しかし、辞書も大丈夫のようです。

どうもありがとうございました!!!

アップデート

私は今、問題を完全に解決しました。新しいPDFを見つけることができます ここ.

役に立ちましたか?

解決

私が見る2つの問題(ストリームデータ自体を見ることなく。

  1. "サイズ 整数(必須)このセクションまたはこれが更新となるセクションで使用されている最高のオブジェクト番号よりも1つ大きいナンバー1。これは、トレーラー辞書のサイズエントリに相当するものとします。」

    あなたのサイズは... 14でなければなりません。

  2. "索引 このセクションの各サブセクションの整数のペアを含む配列(オプション)。最初の整数は、サブセクションの最初のオブジェクト番号でなければなりません。 2番目の整数は、サブセクション内のエントリの数でなければならないものとするアレイは、オブジェクト番号で昇順でソートされるものとします。サブセクションは重複できません。オブジェクト番号には、セクションにせいぜい1つのエントリがあります。デフォルト値:[0サイズ]。」

    インデックスはおそらく少しスキップする必要があります。 2〜4または7オブジェクトはありません。インデックス配列はそれを反映する必要があります。

  3. あなたのデータも正しくありません(そして、私はXrefストリームを読むことを学びました。


00 00 00
01 00 0a
01 00 47
01 01 01
01 01 70
01 02 fd
01 76 f1
01 84 6b
01 84 a1
01 85 4f

このデータによると、「インデックスなし」がオブジェクト番号0〜9として解釈されるため、次のオフセットがあります。

0は未使用です。罰金。
1は0x0aです。うん、確かに
2は0x47です。いいえ。それは「1 0」のストリームの始まりの近くに着地します。これはおそらく偶然ではありません。
3は0x101です。いいえ。 0x101はまだ「1 0」のストリーム内です。
4は0x170です。同上
5は0x2fdです。同上
6は0x76F1です。いいえ、今回はその画像のストリームに埋もれました。

私はあなたがアイデアを得ると思います。したがって、正しいインデックスがあったとしても、オフセットはすべて間違っています(そして、結果が結果であるものとはまったく異なり、Dec-hexの混乱を可能にします)。

あなたが望むものは、結果のXrefで見つけることができます:

xref
0 2
0000000000 65535 f
0000000010 00000 n
5 2
0000003460 00000 n
0000003514 00000 n
8 5
0000003688 00000 n
0000003749 00000 n
0000003935 00000 n
0000004046 00000 n
0000004443 00000 n

したがって、インデックスは(私がこれを正しく読んでいる場合)である必要があります: index [0 2 5 2 8 5]。とデータ:
0 0 0
1 0 a
1 3460(それは小数です)
1 3514(同上)
1 3688

興味深いことに、PDF仕様によると、サイズはこれと以前のすべてのXREFのエントリの数と、使用中の最高のオブジェクト数よりも高いナンバーワンでなければならないと述べています。

後の部分が実施されているとは思わないが、Xrefストリームが通常のクロス参照テーブルよりも保持的であることに気付いて驚かないだろう。両方を処理しているのと同じコードである可能性がありますが、そうではないかもしれません。


@mtraut:

これが私が見ているものです:

13 0 obj
<</Size 10/Length 44/Filter /FlateDecode/DecodeParms <</Columns 3/Predictor 12>>/W [1 2 0]/Type /XRef/Root 8 0 R>>
ストリーム
...
エンドストリーム
endobj

他のヒント

「resultStream.pdf」には、有効な相互参照ストリームがありません。

視聴者で開くと、彼はクロスREFストリームとしてオブジェクト「13 0」を読み込もうとしますが、そのプレーン辞書(ストリームタグとデータがありません)。

トピックから少し離れています:あなたはどの言語を開発していますか?少なくともJavaでは、3つの貴重な選択肢を知っています(PDFBOX、ITEXT、JPOD。開発者の1人がJPODを選択すると、非常にクリーンな実装:-)。これがプラットフォームに適合しない場合は、少なくともアルゴリズムとデータ構造を見ることができます。

編集

まあ - 「resultStream.pdf」が問題のドキュメントである場合、これは私の編集者(scite)が見るものです

...
13 0 obj
<</Size 0/W [1 2 0]/Type /XRef/Root 8 0 R>>
endobj
startxref
34127
%%EOF

ストリームはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top