PDF知识讲座一pdf(Portable Document Format,便携式文档结构)是一种很有用的文件格式,其最大的特点是
平台无关而且功能强大(支持文字\图象\音乐\视频).今天先讲一下pdf的文件(物理)结构
PDF文件结构可分为以下几块:
1.header:
pdf文件的第一行,格式如下: %PDF-1.3 表示当前文件的版本是1.3(目前最高版本为1.5)2.body:
pdf文件中用到的所有对象,包括文本\图象\音乐\视频\字体\超连接\加密信息等等,格式如下: 2 0 obj
...
end obj 其中省略号部分是pdf规定的任意合法对象(一共8种)3.cross reference table:
所有pdf对象的引用表,其格式如下: xref
0 5
0000000000 65535 f
0000000009 00000 n
0000000074 00000 n
0000000120 00000 n
0000000179 00000 n 其中,xref是开始标志,表示以下为引用表内容;0 5表示从对象号为0的开始,
连续有5个对象(0,1,2,3,4),分别用5行来表示.每行的前10个数字代表这个
这个对象相对文件头的偏移地址,后面5个数字只有当这个对象被删除的时
候才有用,表示这个对象被删除后又被重新生成后的对象号最后一位f或n表
示对象是否被使用(n表示使用,f表示被删除或没有用)4.trailer:
整个pdf文件的入口点,形式如下:
trailer
<<
/Size 8
/Root 1 0 R
>>
startxref
553
%%EOF /size :这个pdf中总共使用了多少个对象
/root :这个pdf文件的catalog对象的对象号,这是pdf中最顶层的对象
/startxref: 后面的数字表示cross reference table的开始位置
/%%EOF :文件结束符.实际一个pdf文件是很复杂的,但是上面几个部分是确定的,只能多不能少.下一讲我说一下pdf里面8种类型.

解决方案 »

  1.   

    以下是一个完整的pdf源文件,内容是显示一个"hello world",对照上面的说明应该能看个差不多
    下一讲我主要把pdf的8种对象类型说一下:)%PDF-1.0
    1 0 obj
    <<
    /Type /Catalog
    /Pages 3 0 R
    /Outlines 2 0 R
    >>
    endobj
    2 0 obj
    <<
    /Type /Outlines
    /Count 0
    >>
    endobj
    3 0 obj
    <<
    /Type /Pages
    /Count 1
    /Kids [4 0 R]
    >>
    endobj
    4 0 obj
    <<
    /Type /Page
    /Parent 3 0 R
    /Resources << /Font << /F1 7 0 R >>/ProcSet 6 0 R
    >>
    /MediaBox [0 0 612 792]
    /Contents 5 0 R
    >>
    endobj
    5 0 obj
    << /Length 44 >>
    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
    0000000322 00000 n
    0000000415 00000 n
    0000000445 00000 n
    trailer
    <<
    /Size 8
    /Root 1 0 R
    >>
    startxref
    553
    %%EOF
      

  2.   

    请问怎样才能把文本从里边单独取出来?如取出"hello world!"
    期待下一讲
      

  3.   

    建议先从分类讲起好点,如obj,stream等以及array如何表示等再详细说如何读取,如我是从startxref后面的数字即索引读起,然后从xref中定位每个对象的位置
      

  4.   

    这样子支持中文不?我以前也自己使用UE分析过PDF格式,
    但是不支持中文滴
      

  5.   

    有xpdf可用,研究格式没啥太大意义,让你更熟练而以
      

  6.   

    請教:如何在VC++實現如PDF裏面Hand抓手工具來上下左右拖動窗口客戶區??(能有個例子最好)希望各位大蝦不吝賜教~~小弟我跪求幫助!!謝謝..