我正在尝试阅读pdf版本> = 1.5的外部参照表.
xref表是一个对象:
58 0 obj <</DecodeParms<</Columns 4/Predictor 12>>/Filter/FlateDecode/ID[<CB05990F613E2FCB6120F059A2BCA25B><E2ED9D17A60FB145B03010B70517FC30>]/Index[38 39]/Info 37 0 R/Length 96/Prev 67529/Root 39 0 R/Size 77/Type/XRef/W[1 2 1]>>stream hÞbbd``b`:$AD`Ì ‰Õ Vˆ8âXAÄ×HÈ$€t¨ – ÁwHp·‚ŒZ$ìÄb!&F† .#5‰ÿŒ>(more here but can't paste) endstream endobj
如你看到的
但是:
解压缩的流长195个字节(39*5 = 195).所以条目的长度是4或5.
这是第一个膨胀的字节
02 01 00 10 00 02 00 02 cd 00 02 00 01 51 00 02 00 01 70 00 02 00 05 7a 00 02
^^
如果条目长度为4则根条目是一个自由对象(参见^^)!!
如果条目是5:如何解释一个条目的字段(隐含地参考PDF参考,章节3.4.7表3.16)?
对于对象38,第一个流:它似乎是类型2,它是流对象编号256的16个对象,但是我的pdf文件中没有对象256!
问题是:我该如何处理195个字节?
usr*_*301 12
压缩的外部参照表可能已使用其中一个PNG过滤器进行压缩.如果该/Predictor值设置为"10"或更大("预测值大于或等于10仅表示正在使用PNG预测值;使用的特定预测函数在输入数据中明确编码")1,PNG行过滤器在"压缩数据"中"照常"提供(即,在每个"行"的第一个字节中,其中"行"的宽度为/W).
宽度[1 2 1] 加上预测字节:
02 01 00 10 00
02 00 02 cd 00
02 00 01 51 00
02 00 01 70 00
02 00 05 7a 00
02 .. .. .. ..
Run Code Online (Sandbox Code Playgroud)
应用行筛选器('2'或'up',对于所有这些行),您得到:
01 00 10 00
01 02 ed 00
01 03 3e 00
01 04 ae 00
01 09 28 00
.. .. .. ..
Run Code Online (Sandbox Code Playgroud)
注:手工计算; 我可能在这里和那里犯了一个奇怪的错误.注意,PNG'up'滤波器是一个字节滤波器,并且"up"滤波器的结果在每次加法时被截断为8位.
这导致以下类型1 XRef引用("类型1条目定义正在使用但未压缩的对象(对应于交叉引用表中的n个条目)."):2
#38 type 1: offset 10h, generation 0
#39 type 1: offset 2EDh, generation 0
#40 type 1: offset 33Eh, generation 0
#41 type 1: offset 4AEh, generation 0
#42 type 1: offset 928h, generation 0
Run Code Online (Sandbox Code Playgroud)
1个见LZW和Flate预测函数在PDF参考1.7,第6版,第3.3节:过滤器.
2如PDF Ref 1.7中的表3.16所述.