没有页面树的PDF结构

时间:2018-10-30 14:20:17

标签: pdf

美好的一天! 我有这个Root节点的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等) 谢谢

1 个答案:

答案 0 :(得分:1)

找不到该对象,因为它与许多其他对象一起存储在压缩流中。

和往常一样,您应该先阅读交叉参考表export const config = admin => ({ columnDefs: getColumnDefs(admin), rowDefs: getRowDefs(), }); // main.js import { config } from './gridConfig'; function doStuff() { const { columnDefs, rowDefs } = config(admin);//get the admin variable set before this line grid.columnDefs = columnDefs['orders']; ... } 。您会发现它也被压缩了。请参见ISO PDF 32000-1:2008中的 7.5.8交叉引用流

  

7.5.8.1常规
  从PDF 1.5开始,交叉引用信息可以存储在交叉引用流中,而不是存储在交叉引用表中。

xref指向字典

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. .. 是“未使用”,等于常规外部参照表中的0f等于其中的1常规表,n表示对象已在另一个流中压缩。有关完整含义,请参见ISO参考。

由此,您可以看到对象#2中的2条目位于偏移量15(十进制)处,而您的/Root,#4处于压缩流中的位置#1。确实,将其解压缩可以显示预期的结果

/Pages