Van*_*ing 5 pdf pdf-generation pdf-parsing
我正在开发一个PDF解析器/编写器,但我坚持生成交叉引用流.我的程序读取此文件,然后删除其线性化,并解压缩对象流中的所有对象.最后,它构建PDF文件并保存.
当我使用正常的交叉引用和预告片时,这非常有效,正如您在此文件中看到的那样.
当我尝试生成交叉引用流对象时(导致此文件,Adobe Reader无法查看它).
有没有人使用PDF,可以帮助我搜索问题所在?
请注意,交叉引用是文件2和文件3之间的唯一区别.前34127个字节是相同的.
如果有人需要解码参考流的内容,请下载此文件并在HEX编辑器中打开它.我一次又一次检查了这个参考表,但我找不到任何错误.但字典似乎也没问题.
非常感谢你的帮助!!!
更新
我现在已经彻底解决了这个问题.您可以在此处找到新PDF .
我看到的两个问题(没有查看流数据本身.
" 大小 整数(必需)第一个大于本节或任何应更新的部分中使用的最高对象数.它应等于预告词典中的大小条目."
你的身材应该是...... 14.
" 索引数组(可选)本节中每个子部分包含一对整数的数组.第一个整数应该是子部分中的第一个对象编号;第二个整数应该是子部分中的条目数.数组应该被排序按对象编号按升序排列.子节不能重叠;对象编号最多可以在一个节中有一个条目.默认值:[0大小]."
您的索引应该可以略微跳过一下.您没有对象2-4或7.索引数组需要反映这一点.
你的数据也不正确(我刚刚学会了读取外部参照流.是的.)
\Index[0 2 5 2 8 5]
根据此数据,由于您的"无索引"被解释为对象编号0到9,因此具有以下偏移量:
0未使用.精细.
1是0x0a.是的,肯定是
2是在0x47.不.它落在"1 0"流的开头附近.这可能不是巧合.
3是0x101.不.0x101仍然在"1 0"的流中.
4是0x170.Ditto
5位于0x2fd.Ditto
6位于0x76f1.不,这次埋在那个图像的流中.
我想你应该已经明白了.所以,即使你有一个正确的\索引,你的偏移都是错误的(并且与resultNormal.pdf中的内容完全不同,甚至允许dec-hex混淆).
您可以在resultNormal的外部参照中找到您想要的内容:
\Index[0 2 5 2 8 5]
所以你的索引应该是(如果我正好读这个):\索引[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
\Index[0 2 5 2 8 5]
stream
...
endstream
endobj
| 归档时间: |
|
| 查看次数: |
6515 次 |
| 最近记录: |