PDF学习三 PDF文件逻辑结构
说明:
要解析一个PDF文件,首先要掌握PDF的物理结构,这是第一步。但是这个仅仅只是基础,更重要的是对PDF逻辑结构的解析。PDF的逻辑大体上是一个树状结构,根节点是catalog字典,通过这里去解析页、目录、链接信息等等。
PDF reference 1.7.pdf 中3.6节。
目标:
掌握PDF树型结构,掌握从Root到Page Content解析流程。
Catalog根节点
Catalog是整个PDF逻辑结构的根节点,是通过trailer的Root字段定位,相当重要,因为这里是PDF文件物理结构和逻辑结构的连接点。Catalog字典包含的信息非常多,这里仅列了Pages做个说明。
完整的可查看 PDF reference1.7.pdf Page 137。
以下是Catalog 字典
3 0 obj % 根据Root中指定的间接引用对象号找到Catalog字典
<<
/Type /Catalog % 指定类型是Catalog,区分大小写
/Pages 1 0 R % 指向页面树的跟节点
>>
endobj % 对象结束关键字
Page Tree 根节点
1 0 obj % 根据Catalog字典中Pages指定的间接引用对象号找到Pages字典
<<
/Type /Pages
/Kids [2 0 R] % 该Page Tree节点下的子节点,可以是Page字典,也可以是其他Page Tree节点
/Count 1 % 该文档的页面数,1说明文档只有1页。
>>
endobj
Page 字典
2 0 obj % Page 字典
<<
/Type /Page
/Parent 1 0 R % parent page tree node
/MediaBox [0 0 612 792] % page size (612x792 points)
/Contents 4 0 R % content stream
/Resources << % resource dictionary
/Font << % font list
/Font1 5 0 R>>
>> >>
endobj
Contents字典
4 0 obj % the page content stream
<<
/Length 0 % should be byte length of the stream data.
% We use 0 here for convenience.
>> stream
% Text example: draw "Hello World!" text
BT % begin text object
/Font1 10 Tf % set font to /Font1, font size to 10 points
100 700 TD % move text position to 100,700
(Hello World!) Tj % output the text
ET % end text object
endstream
endobj
Resources字典
这个例子中包含的是font字典
5 0 obj % a font dictionary.
% This is a base-14 font, so only a few data is required.
<<
/Type /Font
/Subtype /Type1
/BaseFont /Helvetica
>>
endobj
页面继承
看下图,例如Rotate属性可以从page 父节点中继承。
Name Dictionary
PDF文件中的一些对象类型可以被名称引用而不是被对象引用。名称和对象之间的对应是通过文档的名称字典(PDF1.2)建立的,通过Names选项定位在文档目录册中(参看3.6.1部分,“文档目录册”)。在这个字典中的每个选项指派一个名称树结构的根节点(参看3.8.5部分,“名称树”)。
后记:
Catalog中还有许多其他条目,例如:Outline、OpenAction、PageLabels、OpenAction、AA、AcroForm,大家对哪个感兴趣,可留言给我。
问题汇总:
1)Q:Catalog指向的Pages root节点中的Count数是表示该文档的所有页面吗?
A:是的,是该文档的页面总数。PDF中说明:(Required) The number of leaf nodes (page objects) that are descendants of this node within the page tree.
2)Q:Points单位
1 Points = 1/72 inch
屏幕 1 inch = 96 pixel
PDF中Points 坐标转换为屏幕pixel。 例如页面宽为w:w*96/72 得出在屏幕上显示的值。
3)Q:PDF单位能换吗?例如可以将Points换为inch吗?
A:PDF单位只能是Point,1/72 inch。在Page 对象中有UserUnit,可以设置用户空间单位,默认是1。可以设置为2,相当于整个坐标系放大2倍,例如 10*10的矩形框,在UserUnit 为2的里面相当于20*20的矩形框。
/UserUnit 2
微信公众号关注
PDF学习三 PDF文件逻辑结构相关推荐
- ROS入门学习三——launch文件
launch作用:便于一次启动多个节点,可启动本地节点和远程节点及修改添加参数服务器参数. <launch> //<launch>是所有launch文件的根标签<node ...
- PDF杂谈一 PDF对象流
引言 在"PDF学习二 PDF物理结构"的说明里用了较大的篇幅说明了交叉引用表,但是有人表示说,用记事本打开一个PDF文件,并没有看到所谓的交叉引用表. 精华提炼出来的文档的描述有 ...
- PDF学习二:PDF文件物理结构
说明: 在PDF学习一 Hello World中简单提到了PDF文件结构.本文将重点讲PDF文件结构,指的是其文件物理组织方式,决定对象是如何存放在一个PDF文件中, 它们是如何被访问的,如何被更新的 ...
- linux环境编程 学习,学习linux环境高级编程首先学习的是文件的操作。因为有.pdf...
学习linux环境高级编程首先学习的是文件的操作.因为有 学习 Linux 环境高级编程,首先学习的是文件的操作.因为有一句很有趣的话"Linux 下一切皆文件".所以掌握了文件操 ...
- (三)、IText通过pdf模板生成pdf文件(可用做回执单等功能)
一.首先制作一个pdf模板 先用word做出个模板界面, 文件另存为pdf格式文件 通过Adobe Acrobat DC软件打开刚刚用word转换成的pdf文件步骤:文件->创建->创建表 ...
- 怎么把pdf转换成excel文件?
怎么把pdf转换成excel文件?互联网时代的今天,许多办公技巧都有了翻天覆地的变化,其中尤以pdf.excel.word.图片几种文件的相互转换变化较多.过去的办公文员们无论是把pdf转换成exce ...
- 如何把PDF转成PPT文件?这几招简单方便
很多工作者,经常在会议中会用到PPT来汇总方案,但是有些优质的文案是放在PDF文件中储存的,没有办法很好的呈现出来,这时就需要将PDF转成PPT文件,那PDF怎么转换为PPT文件简单方便呢?下面给大家 ...
- IntelliJ IDEA 14,15 使用教程,实战总结,倾囊相授,内附PDF学习文档
转载博文,尊重原创,感谢前辈分享,原文地址:"请叫我大师兄__"的CSDN博客主页 文章目录 前言 一.安装 二.使用 1.Debug 2.修改内存 3.一般设置 4.高级设置 5 ...
- pdf转word pdf转图片 图片转pdf 修改pdf文件就像操作Word一样方便(Acrobat DC使用介绍)
修改pdf文件如操作Word一样方便 你是否尝试过很多方法编辑pdf最后却失败了?你是否曾经认为pdf文件只能阅读不能修改. pdf转word pdf转图片 图片转pdf 你曾希望,谁能手把手教你编辑 ...
最新文章
- python文件不存在时创建文件_python-创建一个文件(如果不存在)
- 正则表达式:(mysql)REGEXP
- Mac下安装mysql5.7 完整步骤(图文详解)
- SAP中国首个基于SAP HANA的Business One Analytics项目初试锋芒
- 机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录
- 1050 棋盘染色 2 - Wikioi
- 调用startactivityforresult后,onactivityresult立刻返回RESULT_CANCELED
- python中fd和rt是什么意思_python中fd()是什么
- windows验证方式
- 20172315 2017-2018-2 《程序设计与数据结构》实验三报告
- HP DL360 G6 升级BIOS
- HTML5+CSS3基础
- 4个公认高用的OCR文字识别网站,免费高效率!
- Linux 虚拟内存
- 驱动备份及还原命令-手记
- xamarin其实也是一个鸡肋
- 让我带你弄明白什么是RPC ,帮你整理一下你的小脑瓜!
- cluster(1)
- 工欲善其事必先利其器,利用搜狗输入法设置代码片段
- 【2017今日头条】头条校招(JAVA)