成都网站制作培训,知名网站制作公司青岛分公司,建设网站的实验报告,直播开放平台公会上一篇文章我们介绍了一个PDF文档应该包含的最基本的结构#xff0c;并且手写了一个最简单的 “Hello World” 的PDF文档。后面我们介绍新的PDF标准给出示例时将以这个文档为基础#xff0c;而不再给出完整的文档示例#xff0c;小伙伴想自己测试可以根据上一节的文档来进行…上一篇文章我们介绍了一个PDF文档应该包含的最基本的结构并且手写了一个最简单的 “Hello World” 的PDF文档。后面我们介绍新的PDF标准给出示例时将以这个文档为基础而不再给出完整的文档示例小伙伴想自己测试可以根据上一节的文档来进行配置。
对象
上一节我们看到一个个奇奇怪怪的元素可能也好奇它们的写法现在我们来正式介绍它们的相关内容它们就是PDF文档中一个个的对象。
PDF 支持5种基本对象
整数和实数例如43和12.2 这种数字字符串PDF种字符串被包裹在小括号中例如上一节中的 (hello world), 我们也可以给字符串制定编码这个在后面介绍名称一般用于字典中的键以/ 开头例如上一节中的 /Page 就是一个名称的对象布尔值: 由关键字 true 和 false表示null 对象由关键字 null 表示
PDF支持3种复合对象
数组: 包含其他对象的有序集合数组中的元素可以是其他任何类型的对象例如可以像 [0 0 0 0 1] 这样只包含数字也可以像上一节中的 [2 0 R] 包含其他对象的一个引用字典: 字典是由无序对的集合组成将名称映射到对象。字典中的映射被包含在 对中例如 /Kids [2 0 R] 就是一个字典它将Kids这个名称映射到 [2 0 R] 这个间接引用的对象上流流中一般包含二进制的数据流以及描述属性的字典一般page中的content都是一个个的流对象。
间接引用
间接引用形成从一个对象到另一个对象的链接为了将PDF拆分成一个个单独的对象我们通过间接引用将它们链接在一起例如上一篇文章中提到的
1 0 obj /Kids [2 0 R]
/Count 1
/Type /Pages对象中就包含间接引用PDF解析器知道这个对象是一个Pages对象之后可以通过Kids 对象指定的间接引用对象知道当前PDF文档只有一页这个页面对象就是2 0 这个对象。 这里的R 代表 reference 也就是引用它是一个关键字前面的 2 0 代表的是对象编号是2世代号是0这里我们不考虑世代号默认的世代号都是0
流和过滤器
流用于存储二进制数据它们由字典和一大块二进制数据组成字典根据流所放置的特定用途列出数据的长度以及可选的其他参数。
从语法上将流由字典组成后跟 stream 关键字换行符0个或者多个字节的数据另一个换行符最后是一个endstream 关键字。根据上一篇文章中给出的页面流对象的定义来看
4 0 obj /Length 202 % 流的长度stream %关键字
1. 0. 0. 1. 50. 700. cm % 202 字节的数据这里是图形流下面是图形流的数据
BT/F0 36. Tf(Hello, World!) Tj
ET
endstream % 流对象结束的关键字
endobj