pdf - 没有页面树的pdf结构
问题描述
再会!我有这个根节点的pdf文件:
2 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/Metadata 5 0 R
/Outlines 6 0 R
/PageMode /UseOutlines
/OpenAction [7 0 R /XYZ null null 1]
/PageLabels 8 0 R
/PageLayout /OneColumn
>>
endobj
但是,当我搜索页面节点(4 0 obj)时,我什么也没找到。请帮帮我,怎么可能,我什么时候可以取页数(只有pdf格式的解决方案。不是imagick等)谢谢
解决方案
您找不到该对象,因为它与许多其他对象一起存储在压缩流中。
与往常一样,您应该从阅读交叉引用表开始xref
。你会发现这也被压缩了;请参阅ISO PDF 32000-1:2008 中的 7.5.8 交叉引用流:
7.5.8.1 概述
从 PDF 1.5 开始,交叉引用信息可以存储在交叉引用流中而不是交叉引用表中。
startxref
指向字典
6628 0 obj
<<
/W [1 4 1]
/Info 1 0 R
/Root 2 0 R
/Size 6629
/Type /XRef
/Filter /FlateDecode
/Length 3996
/DecodeParms <<
/Columns 6
/Predictor 12
>>
>>
stream
... (compressed data) ..
endstream
并解压这个节目
index entry 0: 0 0 255
index entry 1: 2 3 0
index entry 2: 1 15 0
index entry 3: 1 3981 0
index entry 4: 2 3 1
index entry 5: 1 197 0
index entry 6: 2 3 2
index entry 7: 2 3 3
index entry 8: 2 3 4
index entry 9: 2 3 5
.. etc. ..
条目中的第一个数字是其状态:0
“未使用”,f
在常规外部参照表1
中等于,n
在常规表中等于,2
表示对象在另一个流中被压缩。有关完整含义,请参见 ISO 参考。
从这里,您可以看到/Root
对象 #2 中的条目位于偏移量 15(十进制)处,而您的/Pages
#4 位于位置 #1 的压缩流中。事实上,解压缩这显示了预期的
4 0 obj @ 3 % "Pages"
<<
/Type /Pages
/Count 364
/Kids [
9 0 R 10 0 R ]
>>
endobj
推荐阅读
- c# - In C#, what is a good method for dealing with long template type names that include protected nested types?
- android - Fabric Crashlytics Beta deploy fails: Project is inactive
- angular - 找不到资源文件“**/*.resx”.net core 2.1.1 角度模板
- android - Android O 访问 App 设置活动
- c++ - 使用初始化列表将 const 数组引用实例化为构造函数参数,是否允许?
- r - 朴素贝叶斯预测的“下标越界”错误?(训练/测试中的相同级别)
- python - function is not returning what is intended
- python - 将程序连接到正在运行的游戏,更新每一帧
- javascript - Handle table inside another HTML table without interfering with JAVASCRIPT
- unity3d - 当我点击播放时,Unity 会从脚本中删除游戏对象