pdf文件内容分析工具简介(研究pdf标准好帮手)
前言:PDF文件标准诞生于20年前,从今天的视角来看,标准设计理念有些过时了;然而,pdf文件生态已经形成,尾大不掉吧。纵然有各种缺点,但是不可否认的事实:pdf是当今应用最广泛的版式文件。
pdf文件中内容是文本和二进制夹杂的混合物,直接查看文件内容难以理解。本人开发了一款工具,可以方便的查看文件内容,见下图:

组成pdf的基本元素是Dictionary。Dictionary包含header和body,header是文本的,描述tree状结构;body是二进制,解析过程由header决定。
pdf文件结构图:

解析pdf文件过程:
1 找到cross-reference table起始位置。
从pdf文件尾部向前搜索“startxref”,该关键字下一行就是cross-reference table起始位置。

2 解析cross-reference table,确定每个Dictionary对象的起始位置。

上图说明有32个Dictionary,并标明了每个Dictionary的起始地址。
3 解析Dictionary

上图前半部分是文本;后半部分是二进制,所以显示为乱码。这个Dictionary描述了一段压缩数据,并指明了压缩算法。
pdf文件的页组成

后记:作者研究pdf多年,但是pdf文件内容不易理解。借助于该工具,能极大的方便对pdf标准的理解,并快速定位问题。
pdf文件内容分析工具简介(研究pdf标准好帮手)的更多相关文章
- 【强大的PDF格式转换工具】Lighten PDF Converter OCR for Mac 6.2.0
[简介] Lighten PDF Converter OCR 是一款Mac上强大的PDF格式转换工具,可以将PDF文档快速批量的转换为Office (Word, Excel, PowerPoint), ...
- Pdf文件处理组件对比(Aspose.Pdf,Spire.Pdf,iText7)
目的 因为公司是做医疗相关软件的,所以经常和文档打交道,其中就包含了Pdf.医院的Pdf(通常是他们的报告)都千奇百怪,而我们一直以来都是在用一些免费且可能已经没人维护了的组件来处理Pdf,所以就经常 ...
- 借助91助手,将ibook中的pdf文件拷贝至其它的pdf阅读器中(ios设备无需越狱)
有时候在使用ios自带的ibook阅读pdf文件的时候,会发现ibook有些功能并不是那么方便.最近我就遇到了一例,我想在ibook中放一本比较大的pdf书,页数有几百吧,pdf文件本身每一章节都是有 ...
- PDF转WORD工具 Solid Converter PDF v9.1.6744
Solid Converter PDF中文破解版(pdf转换成word转换器)是一款功能强大的PDF格式转换软件.Solid Converter PDF允许用户将PDF转换为Word(PDF to W ...
- PDF文件如何标注,怎么使用PDF标注工具
我们在使用文件的时候需要给文件的部分添加标注,能够更加直观的了解文件,但是有很多小伙伴们对于PDF文件怎么添加标注都不知道,也不知道PDF标注工具要怎么使用,那么下面就跟大家分享一下怎么使用PDF标注 ...
- robotframework 测试工具添加PDF文件内容匹配插件
robotframework 这个需要了解的请度娘.本文实现的是一个小功能.大体分为如下几个步骤 1)给定一个pdf文件. 2)读取pdf文件内容,并解析为文本内容. 3)通过给定的内容,比对pdf ...
- C# Parsing 类实现的 PDF 文件分析器
下载示例 下载源代码 1. 介绍 这个项目让你可以去读取并解析一个PDF文件,并将其内部结构展示出来. PDF文件的格式标准文档可以从Adobe那儿获取到. 这个项目基于“PDF指南,第六版,Adob ...
- Pdf File Writer 中文应用(PDF文件编写器C#类库)
该文由小居工作室(QQ:2482052910) 翻译并提供解答支持,原文地址:Pdf File Writer 中文应用(PDF文件编写器C#类库):http://www.cnblogs.com/ ...
- Itext生成pdf文件
来源:https://my.oschina.net/lujianing/blog/894365 1.背景 在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同等. ...
- kali 系列学习10-渗透攻击MySQL数据库服务、PostgreSQL数据库服务、Tomcat服务和PDF文件
介绍使用MSFCONSOLE工具渗透攻击MySQL数据库服务.PostgreSQL数据库服务.Tomcat服务和PDF文件等. 6.4.1 渗透攻击MySQL数据库服务 MySQL是一个关系型数据库管 ...
随机推荐
- PHP执行root命令权限
先修改php函数启用system vi /usr/local/php/etc/php.ini disable functions 里面删除system 修改php账号执行权限www vi /etc/s ...
- Power BI使用技巧
一.筛选器相关 1.筛选器的可选择范围不正确 在Power BI中,维度表和事实表之间的数据建模非常重要,我们在进行关系的建立的时候,PBI Desktop会根据我们的数据情况自动选择两个表之间的基数 ...
- 如果让你处理hbase 怎么保证数据的安全性可靠性 不需要具体的设置 要一套方案
有关数据安全及可靠我们认为大体上分为存储安全和使用安全 1 数据存储安全 hbase是基于hdfs的一种数据存储解决方案,所以有关数据的安全性可靠性可以利用hdfs自身的副本机制保障.另外原生的hba ...
- 开源 - Ideal库 - 特殊时间扩展方法(三)
书接上回,我们继续来分享一些关于特殊时间获取的常用扩展方法. 01.获取当天的开始时间 当天的开始时间指00:00:00时刻,因此只需要获取DateTime的Date属性只获取时间即可,具体代码如下: ...
- 服务端SSE数据代理与基于fetch的EventSource实现
服务端SSE数据代理与基于fetch的EventSource实现 Server-Sent Events(SSE)是一种由服务器单向推送实时更新到客户端的方案,基本原理是客户端通过HTTP请求打开与服务 ...
- 案例分享-导致MySQL崩溃的SQL语句
背景 周一刚上班一个开发小哥火急火燎的过来找我,黑龙江某客户私有化环境的服务过一阵就报数据库连接失败,不知道是什么原因导致的,我以为是客户调整了网络,但是客户说并没有做任何调整,我使用ping测试也看 ...
- Air780E软件指南:C语言内存数组(zbuff)
一.ZBUFF(C内存数组)简介 zbuff库可以用c风格直接操作(下标从0开始),例如buff[0]=buff[3] 可以在sram上或者psram上申请空间,也可以自动申请(如存在psram则在p ...
- ubuntu 使用tree打印树形结构
ubuntu 使用 tree 命令能打印目录结构 sudo apt-get install tree 安装后使用tree就行了 . ├── index.php ├── phpQuery │ ├── ...
- JS之Date时间处理
初始化当前时间: // 1. 使用构造函数方式 var newDate = new Date() // 2. 使用函数方式 var date = Date() // 返回的是一个Date对象 cons ...
- CF 3000+
CF1981F / *3000 首先有朴素的 dp:\(f_{u, i}\) 表示以 \(u\) 为根的子树已经 finish 了,经过 \(u\) 往上走的路径 MEX 为 \(i\).\(i\) ...