本系列文章旨在带您实际了解 PDF 文档的工作原理。
我将首先简要介绍编写 PDF 所需的元素。本系列最终将带您使用文本编辑器和十六进制编辑器来创建自己的低级 Hello World PDF 文件。
在我开始使用 PDF 文件之前,我以为它们只是某种花哨的文本文档,其中嵌入了用于呈现图形的脚本。确实,PDF 看起来像是这样,但我觉得它更像一种编程语言,其中 PDF 文件是代码,而像 Adob e Reader 或我们自己的产品 JPedal 中的 PDF Viewer 这样的阅读器则是将代码转换为可阅读文档的翻译器。
PDF 文件主要由组织成树结构的对象组成,树的每个节点都是一个对象。每个对象都能表示 PDF 阅读器可以理解的八种数据类型之一:字符串、数组、数字(整数和实数)、布尔值(真/假)、名称对象(见下文)、关联数组(称为字典)、流(由字典和大量二进制内容组成)和空对象。如果您在文本编辑器中打开 PDF 文件,您会注意到很多对象。
以下是一个例子:
41 0 obj<</Type/Pages/Kids[34 0 R 43 0 R 52 0 R]/Count 3>>
endobj
这是一个名为 41 的对象,第一个数字是名称。第二个是修订号(这个数字似乎从未被使用过,因为它似乎总是零)。obj 部分表示它是一个对象。如果您按照文本操作,最终会得到一个 endobj,表明中间的所有内容都属于对象 41。尖括号(<< >>)表示对象 41 属于字典类型。字典是 PDF 文件中经常使用的数据类型,包含描述文档某些方面的键和值对列表。值部分可以是八种类型的对象中的任何一种,包括其他字典。
我使用的示例包含 3 个键:/Type、/Kids 和 /Count。这些是名称对象,您可以分辨出来,因为它们以 / 开头。名称对象基本上是一个对 PDF 阅读器有意义的名称。字典中的键始终是名称对象。此字典通过其 /Type 键 (/Type/Pages) 表示它包含有关页面的信息。以下是关于一些子节点的名称/数组对。这由名称对象 Kids、/Kids[34 0 R 43 0 R 52 0 R] 表示。
数组括在方括号中。数组内部可能看起来很熟悉,它们是指向其他对象的指针,而不是 obj 字符,而是 R。例如,如果我想创建指向对象 41 0 obj 的链接,我会说 41 0 R。最后一个元素有一个名为 /Count 的键,它映射到数字对象 3。因此,对象 41 表示该文档有 3 页,您可以在对象 34、43 和 52 中找到有关每页的信息。
下一篇:IDRSolutions:手把手教你从头编写 PDF – 第 2 部分:PDF 文件的结构
标签:obj,对象,手把手,数据类型,41,名称,PDF,字典 From: https://blog.csdn.net/2401_87189539/article/details/143803007