PDF文件格式解析(1)- 了解PDF的语法格式

由Adobe Systems Incorporated开发的PDF(便携式文档格式)被Adobe描述为一种通用的文档表示语言。PDF代表格式化的,面向页面的文档。这些文档可以是结构化的或简单的。它们可能包含文本,图像,图形和其他多媒体内容,例如视频和音频。支持注释,元数据,超文本链接和书签。更高版本提供了其他功能,例如,将地理空间信息嵌入到代表地图或其他地理空间图像(例如卫星照片)的文档中。

PDF的核心是源自PostScript页面描述语言的图像模型。请参阅后记格式族。该模型可以在完整,精确和专业的级别上以与设备无关和与分辨率无关的方式来描述文本和图形。与作为编程语言的PostScript不同,PDF基于结构化的二进制文件格式,该格式针对交互式查看的高性能进行了优化


最新的都已经到PDF2.0的格式了,但是PDF2.0的标准还没有广泛采用,所以本文的介绍还是以PDF1.7为解析参考蓝本。
enter description here

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

  1. %PDF−1.4 


  2. 1 0 obj 


  3. << /Type /Catalog 


  4. /Outlines 2 0 R 


  5. /Pages 3 0 R 


  6. >> 


  7. endobj 


  8. 2 0 obj 


  9. << /Type /Outlines 


  10. /Count 0 


  11. >> 


  12. endobj 


  13. 3 0 obj 


  14. << /Type /Pages 


  15. /Kids [4 0 R] 


  16. /Count 1 


  17. >> 


  18. endobj 


  19. 4 0 obj 


  20. << /Type /Page 


  21. /Parent 3 0 R 


  22. /MediaBox [0 0 612 792] 


  23. /Contents 5 0 R 


  24. /Resources << /ProcSet 6 0 R 


  25. /Font << /F1 7 0 R >> 


  26. >> 


  27. >> 


  28. endobj 


  29. 5 0 obj 


  30. << /Length 73 >> 


  31. stream 


  32. BT 


  33. /F1 24 Tf 


  34. 100 100 Td 


  35. (Hello World) Tj 


  36. ET 


  37. endstream 


  38. endobj 


  39. 6 0 obj 


  40. [/PDF /Text] 


  41. endobj 


  42. 7 0 obj 


  43. << /Type /Font 


  44. /Subtype /Type1 


  45. /Name /F1 


  46. /BaseFont /Helvetica 


  47. /Encoding /MacRomanEncoding 


  48. >> 


  49. endobj 


  50. xref 


  51. 0 8 


  52. 0000000000 65535 f 


  53. 0000000009 00000 n 


  54. 0000000074 00000 n 


  55. 0000000120 00000 n 


  56. 0000000179 00000 n 


  57. 0000000364 00000 n 


  58. 0000000466 00000 n 


  59. 0000000496 00000 n 


  60. trailer 


  61. << /Size 8 


  62. /Root 1 0 R 


  63. >> 


  64. startxref 


  65. 625 


  66. %%EOF 


这段PDF代码的显示结果就是Hello World,如下图。
enter description here

从整体结构来看语法有点类似XML,HTML,基本都有节点控制。每个obj小节都会有个endobj。

enter description here

enter description here

从上面的介绍来看PDF就像变成HTML一样是有固定格式的,所以接下来几个章节就围绕PDF的格式做一个简要的解析。

版权声明:本文为alita原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/alita/p/12070677.html