PDF学习一:Hello World

说明:

使用记事本敲入PDF关键字与指令,生成Hello World.PDF文件。是不是很熟悉,PDF也可以像C++或Java一样先来个Hello Word。
为了书写和讲解方便,本文的Hello World.PDF文件省去了交叉引用表的书写,PDF阅读器例如:Foxit Reader会重建交叉引用表,即容错处理。

目标:

能够用记事本编写一个包含“Hello World” 内容的PDF文件,使用Adobe Reader 与Foxit Reader打开都能够显示。

PDF结构图:

PDF解析流程:


a)从trailer中找到Root关键字,Root是指向Catalog字典,Catalog是一个PDF文件的总入口,它包含Page tree,Outline hierarchy等。

b)从Catalog中找到Pages关键字,Pages是PDF所有页面的总入口,即Page Tree Root。

c)从Pages中找到Kids和Count关键字,Kids中包含Page子节点,Count列出该文档的总页数。到这里我们已经知道PDF文件有多少页了。

d)从Page字典中获取MediaBox、Contents、Resources等信息,MediaBox包含页面宽高信息,Contents包含页面内容,Resources包含页面所需要的资源信息。

e)从Contents指向的内容流中获取页面内容。

简单流程

trailer→ Root→ Catalog→ Pages→ Page→ Contents

PDF基本信息:

1)% 符号表示注释

2)PDF文件区分大小写

后记:

本篇是简单的入门,主要是大家自己动手敲一个PDF文件,不能拷贝黏贴,一定要一个一个字的敲。大家在写的过程有碰到任何问题,都可留言给我。

%PDF-1.4 
1 0 obj << 

/Type /Pages
/Kids [2 0 R] 
/Count 1

>> endobj

2 0 obj <<

/Type /Page

/Parent 1 0 R

/MediaBox [0 0 612 792] 

/Contents 4 0 R 

/Resources << /Font  <</Font1 5 0 R>> >>

>> endobj

3 0 obj <<

/Type /Catalog

/Pages 1 0 R 
>> endobj

4 0 obj 
<</Length 0 >> stream 

BT  

/Font1 10 Tf  
100 700 TD  
(Hello World!) Tj 
ET 

endstream
endobj

5 0 obj 
<<

/Type /Font
/Subtype /Type1
/BaseFont /Helvetica

>>endobj

xref

trailer 
<<

/Size 0 
/Root 3 0 R 
>>

startxref

0  
%%EOF  % end of file

微信公众号

猜你喜欢

转载自blog.csdn.net/u012632138/article/details/80505167