• PDF文件格式(二):交叉引用类型“O“


    PDF交叉引用类型有三种:“n”,"f","o";前两种比较常见,本文介绍第三种“o”类型。

    type为"o"类型的引用在PDF文件中不能够直接找到对应的obj,它被以压缩的形式内嵌在其他的obj内,因此此类型的引用解析比较麻烦;

    解析过程如下:

    1. 获取交叉引用相关信息,先拿到其对应的ofs值,正常交叉引用的ofs表示对应obj的位置,但是这里ofs表示此交叉引用的信息被保存位置所在的obj位置;

    2. 找到对应obj,获取其对应的"First"和"N"的值;First表示obj的stream解压之后需要解析的初始基本位置(base);N表示需要解析的次数,每次解析的内容是交叉引用obj号和stream解压之后需要解析的位置(ofs);最后交叉引用obj内容对应的解析位置是base+ofs,解析的内容是一个pdf的基本类型内容即可。到这里,交叉引用“o”类型的内容解析完毕。

    实例:

    这是一段交叉引用表,Index内容是[13 61],表示从13号Obj开始,到74号结束,这里我们解析46号obj,不过在在PDF文档内查找并没有看到46号obj的,经过解析得出46号obj类型为'o',因此不能直接在文档内找到obj:

    上面没有46号obj; 接下来需要解析交叉引用表得到46号obj对应的ofs(解析方法在前文PDF文件格式一),不过此时的ofs表示需要定位的obj的号,这里得到46号obj的ofs为19(截图红线部位),下面就是19号obj内容:

    19号obj内容可以看到First是219,N是28;然后解压缩stream内容如下:

    219的位置就是"<>/Font<>>>/Fields[]>>”,第二次解析内容是46和106,表示46号obj和对应内容位置是219+106,定位位置是"[",表示这个obj对应内容是数组,解析一个数组内容就是“[47 0 R 48 0 R]”;后面解析方法以此类推。

    上面就是获取交叉引用类型为"o"内容的方法了。

  • 相关阅读:
    深入解析kubernetes中的选举机制
    【011】C++选择控制语句 if 和 switch 详解
    【vue diff算法】
    some数组遍历
    爬虫 Edge浏览器安装Xpaht Helper插件平替Chrome浏览器Xpaht Helper插件定位元素
    LOGO特训营 第一节 鉴别Logo与Logo设计思路
    解决vite+vue3页面不会热更新的问题
    Zotero 插件:DOI Manager 使用
    无监督多视角行人检测 Unsupervised Multi-view Pedestrian Detection
    计算机毕设(附源码)JAVA-SSM基于框架的点餐系统
  • 原文地址:https://blog.csdn.net/u010787096/article/details/136194725