1. PDF概要
1.1. 图像模型
PDF能以平台无关、高效率的方式描叙复杂的文字、图形、排版。
PDF 用图像模型来实现设备无关。
图像模型同意应用程序以抽象对象描叙文字、图像、图标。而不是通过详细的像素点。
把描写叙述抽象对象的语言称作“页描写叙述语言”。
PDF文档中存储都是以“页描写叙述语言”表示的各种抽象对象。
要把PDF文档输出到详细设备上,产生详细像素点,须要有个翻译软件,把抽象对象渲染到详细输出设备上,称这个“翻译软件”为“规则扫描”软件。
1.2. 属性
PDF 具有设备无关、可压缩、安全、增量改动、可扩展等特性。
2. 语法
2.1. 字符集
PDF是大写和小写敏感的语言的。及A和a是不一样的。
PDF字符集分文三种:
1).空白字符
空白字符包含Null(NUL)、Tab(HT)、Line Feed(LF)、Form Feed(FF)、Carriage return(CR)、Space(SP)。除了在comment、string、streams中,全部的空白符都是一样的。PDF把多个连续的空白符看作一个。
2).切割字符
分隔字符包含(, ), <, >, [, ], {, }, /, and %。
切割字符是用来分开需实体对象的,包含string、comment、arrays、names。
3).常规字符
除了上面的两种字符之外的字符都称作常规字符。
2.2. 凝视(comment)
凝视没有语义。仅仅是凝视说明作用。凝视以%开头。到本行结尾。比如
abc% comment {/%) blah blah blah
123
“comment {/%) blah blah blah”为凝视。
2.3. 对象
3.3.1 Boolean 对象
Boolean 对象仅仅有true和false两种值,能够用在array和dictionary中。true和false是keyword。
3.3.2 Numeric 对象
Numeric对象是数组对象。它的取值范围和详细的机器有关,详细范围能够參考“《PDF reference》appendix C”。
Numeric 对象分为Integer和Real对象。
Integer对象就是证书对象。能够在数字前面加+/-的符号。标识正负。比如。
123 43445 +17 −98 0
Real对象是实数对象。
须要注意的是PDF的Real对象是定点小数。而不是浮点小数。不支持像“6.02E23”这种标识。正确标识比如:
34.5 −3.62 +123.6 4. −.002 0.0
假设Integer对象超出的标识范围。会自己主动转化为Real对象。可是假设Real对象超出标识范围。会报错。
全部能够用Real对象的地方都能够用Integer对象,Integer对象会自己主动转换为Real对象。所以对于须要Real对象1.0的地方。直接写1就能够,不用写成1.0。
3.3.3 String 对象
String对象是一个字节数列的集合。字节的取值范围为0~255。字符串的长度范围跟详细平台有关,详细參考“《PDF reference》appendix C”。
String对象分为Literal string和Hexadecimal string。
Literal string对象是是用()括起来的一些字符,除了不正确称的括号(如“(”或者“)”)或者反斜杠(“/”)外的字符,都能够出如今Literal string中。
比如:
(This is a string)
(Strings may contain newlines
and such.)
(Strings may contain balanced parentheses ( ) and
special characters (*!&}^% and so on).)
(The following is an empty string.)
()
(It has zero (0) length.)
在Literal String 能够使用转意字符。如表1
TABLE 3.2 Escape sequences in literal strings
SEQUENCE |
MEANING |
|
Line feed (LF) |
|
Carriage return (CR) |
|
Horizontal tab (HT) |
|
Backspace (BS) |
f |
Form feed (FF) |
( |
Left parenthesis |
) |
Right parenthesis |
\ |
Backslash |
ddd |
Character code ddd (octal) |
所以不在表1中的转义字符会被忽略。
假设一个字符串太长。放在一行不在方便,能够分开写在多行,然后用反斜杠连接起来。例如以下。
(These
two strings
are the same.)
(These two strings are the same.)
假设不加反斜杠,就会相当在末尾加了一个 。例如以下
(These
two strings
are the same.)
(These
two strings
are the same.)
ddd 标识是一个八进制数,提供一种标识不可显示的ASCII的方式。
如
(This string contains 245two octal characters307.)
ddd 仅仅需“” 后后面三位数。包含0。比如