我看到了两个问题(没有查看流数据本身。
"大小 整数(必需)比本节中使用的最高对象编号大一的数字,或者在应更新的任何部分中。它应等效于预告片字典中的大小条目。
你的尺寸应该是... 14。
"索引数组(可选)一个数组,包含本节中每个小节的一对整数。第一个整数应为小节中的第一个对象编号;第二个整数应为小节中的条目数 数组应排序按对象编号升序排列。子部分不能重叠;一个对象编号在一个部分中最多可以有一个条目。默认值:[0 大小]。
您的索引可能应该跳过一点。您没有对象 2-4 或 7。索引数组需要反映这一点。
您的数据也不正确(我刚学会阅读外部参照流。哎呀我。)
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 is unused. Fine.
1 is at 0x0a. Yep, sure is
2 is at 0x47. Nope. That lands near the beginning of "1 0"'s stream. This probably isn't a coincidence.
3 is at 0x101. Nope. 0x101 is still within "1 0"'s stream.
4 is at 0x170. Ditto
5 is at 0x2fd. Ditto
6 is at 0x76f1. Nope, and this time buried inside that image's stream.
我想你应该已经明白了。因此,即使您有一个正确的 \Index,您的偏移量都是错误的(并且与 resultNormal.pdf 中的完全不同,甚至允许 dec-hex 混淆)。
你想要的可以在 resultNormal 的外部参照中找到:
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 (that's decimal)
1 3514 (ditto)
1 3688
etc
有趣的是,PDF 规范规定大小必须既是此外部参照和所有先前外部参照中的条目数,又是比正在使用的最高对象编号高一的数字。
我认为后面的部分永远不会被强制执行,但我不会惊讶地发现外部参照流比普通的交叉引用表更具保留性。可能是相同的代码处理两者,可能不是。
@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>>
stream
...
endstream
endobj