PDF文件格式解析(1)- 了解PDF的语法格式
PDF文件格式解析(1)- 了解PDF的语法格式
由Adobe Systems Incorporated开发的PDF(便携式文档格式)被Adobe描述为一种通用的文档表示语言。PDF代表格式化的,面向页面的文档。这些文档可以是结构化的或简单的。它们可能包含文本,图像,图形和其他多媒体内容,例如视频和音频。支持注释,元数据,超文本链接和书签。更高版本提供了其他功能,例如,将地理空间信息嵌入到代表地图或其他地理空间图像(例如卫星照片)的文档中。
PDF的核心是源自PostScript页面描述语言的图像模型。请参阅后记格式族。该模型可以在完整,精确和专业的级别上以与设备无关和与分辨率无关的方式来描述文本和图形。与作为编程语言的PostScript不同,PDF基于结构化的二进制文件格式,该格式针对交互式查看的高性能进行了优化
最新的都已经到PDF2.0的格式了,但是PDF2.0的标准还没有广泛采用,所以本文的介绍还是以PDF1.7为解析参考蓝本。
PDF的发展史不做过多介绍,本系列文章就是简析PDF文件结构。 pdf_reference_1-7是Adobe PDF的参考手册,可自行从https://www.adobe.com/devnet/pdf/pdf_reference_archive.html下载。
我们看其中的一个例子 TABLE G.2 Objects in simple text string example
- %PDF−1.4
- 1 0 obj
- << /Type /Catalog
- /Outlines 2 0 R
- /Pages 3 0 R
- >>
- endobj
- 2 0 obj
- << /Type /Outlines
- /Count 0
- >>
- endobj
- 3 0 obj
- << /Type /Pages
- /Kids [4 0 R]
- /Count 1
- >>
- endobj
- 4 0 obj
- << /Type /Page
- /Parent 3 0 R
- /MediaBox [0 0 612 792]
- /Contents 5 0 R
- /Resources << /ProcSet 6 0 R
- /Font << /F1 7 0 R >>
- >>
- >>
- endobj
- 5 0 obj
- << /Length 73 >>
- stream
- BT
- /F1 24 Tf
- 100 100 Td
- (Hello World) Tj
- ET
- endstream
- endobj
- 6 0 obj
- [/PDF /Text]
- endobj
- 7 0 obj
- << /Type /Font
- /Subtype /Type1
- /Name /F1
- /BaseFont /Helvetica
- /Encoding /MacRomanEncoding
- >>
- endobj
- xref
- 0 8
- 0000000000 65535 f
- 0000000009 00000 n
- 0000000074 00000 n
- 0000000120 00000 n
- 0000000179 00000 n
- 0000000364 00000 n
- 0000000466 00000 n
- 0000000496 00000 n
- trailer
- << /Size 8
- /Root 1 0 R
- >>
- startxref
- 625
- %%EOF
这段PDF代码的显示结果就是Hello World,如下图。
从整体结构来看语法有点类似XML,HTML,基本都有节点控制。每个obj小节都会有个endobj。
![enter description here enter description here](./images/1576762619073.png)
enter description here
从上面的介绍来看PDF就像变成HTML一样是有固定格式的,所以接下来几个章节就围绕PDF的格式做一个简要的解析。