• PDF文件的基本结构(详细)


    1 Header部分

    PDF文件的第一行应是由5个字符“%PDF-”后跟“1.N”的版本号组成的标题,其中N是0到7之间的数字。例如下面的:

      %PDF1.0
      %PDF1.1
      %PDF1.2
      %PDF1.3
      %PDF1.4
      %PDF1.5
      %PDF1.6
      %PDF1.7

    从PDF 1.4开始,应使用文档目录字典中的Version 条目(通过文件Trailer部分Root条目指定版本),而不是标题中指定的版本。

    2 Body部分

    PDF文件的正文应由表示文件内容的一系列间接对象组成,例如字体、页面和采样图像。从PDF 1.5开始,Body还可以包含对象流,每个对象流包含一系列间接对象。例如下面这样:

    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 >> >> endobj 5 0 obj
    << /Length 35 >> stream   …Page-marking operators… endstream endobj
    6 0 obj [/PDF] endobj

    3 Cross-Reference Table 交叉引用表部分

    交叉引用表包含文件中间接对象的信息,以便允许对这些对象进行随机访问,因此无需读取整个文件即可定位任何特定对象。

    交叉引用表以xref开始,紧接着是一个空格隔开的两个数字,然后每一行就是一个对象信息:

    xref
    0 7
    0000000000 65535 f
    0000000009 00000 n
    0000000074 00000 n
    0000000120 00000 n
    0000000179 00000 n
    0000000300 00000 n
    0000000384 00000 n

    上面第二行中的两个数字“0 7”,0表示下面的对象从0号对象开始,7表示对象的数量,也就是说表示从0到6共7个对象。

    每行一个对象信息的格式如下:

    nnnnnnnnnn ggggg n eol
    • nnnnnnnnnn 长度10个字节,表示对象在文件的偏移地址;
    • ggggg 长度5个字节,表示对象的生成号;
    • n (in-use)表示对象被引用,如果此值是f (free),表示对象未被引用;
    • eol  就是回车换行

    交叉引用表中的第一个编号为0的对象始终是f(free)的,并且生成号为65535;除了编号0的对象外,交叉引用表中的所有对象最初的生成号应为0。删除间接对象时,应将其交叉引用条目标记为“free”,并将其添加到free条目的链表中。下次创建具有该对象编号的对象时,条目的生成号应增加1,最大生成号为65535;当交叉引用条目达到此值时,它将永远不会被重用。


    交叉引用表也可以是这样的:

    xref
    0 1
    0000000000 65535 f
    3 1
    0000025325 00000 n
    23 2
    0000025518 00002 n
    0000025635 00000 n
    30 1
    0000025777 00000 n

    4 Trailer部分

    PDF阅读器是从PDF的尾部开始解析文件的,通过Trailer部分能够快速找到交叉引用表和某些特殊对象。如下所示:

    trailer
    << /Size 7
        /Root 1 0 R
    >>
    startxref
    408
    %%EOF

    文件的最后一行应仅包含文件结束标记%%EOF。关键字startxref下面的数字表示最后一个交叉引用表的xref关键字开头的字节偏移量。trailer和startxref之间是尾部字典,由包含在双尖括号(<<…>>)中的键值对组成。

  • 相关阅读:
    pku3225 区间
    pku2136 Vertical Histogram
    NOI2006 最大获利
    APIO2010 特别行动队
    停电两夜
    偷偷乐一把
    那些花儿...
    一件一块钱的小事
    web service 的Section=ResponseStatusLine 错误和skype
    杂谈
  • 原文地址:https://www.cnblogs.com/ziwuxian/p/12701761.html
Copyright © 2020-2023  润新知