1.版本号
文件头,一般以“%PDF-”开头,后接版本号(一般是1.0~1.7),特殊的PDF标准有其他的规则
2.对象
PDF由对象组成
2.1 boolean
布尔,关键词为true、false
2.2 numberic
数值,包括两种类型:integer、real
2.3 string
字符串,以“(”开头,以“)”结尾,使用“\”进行转义。支持16进制字符串,以“<”开头,以“>”结尾
2.4 name
名称,以“/”开头
2.5 array
数组,以“[”开头,以“]”结尾,通过“ ”隔开,可以存放任意object
2.6 dictionary
字典,由键值对组成,键是name,值是任意object,以“<<”开头,以“>>”结尾,通过“ ”隔开
2.7 stream
流,以“流属性字典”+”stream”开头,以”endstream结尾“,不同部分以“\n”隔开,内容可以为空
字典包括一些基本属性
2.7.1 /Length
integer,块长度,可能为空
2.7.2 /Filter
可选,name或者name array
可选值包括:
- /ASCIIHexDecode /AHx 数据以16进制文本保存
- /ASCII85Decode /A85 数据使用BASE85编码
- /LZWDecode /LZW 数据使用LZW算法压缩
- /FlateDecode /Fl 数据使用deflate算法压缩
- /RunLengthDecode /RL 数据使用RLE算法压缩
- /CCITTFaxDecode /CCF 数据使用CCITT Group III或IV算法压缩
- /JBIG2Decode 数据使用JBIG2算法压缩
- /DCTDecode /DCT 数据使用DCT算法压缩
- /JPXDecode 数据使用JPEG 2000算法压缩
- /Standard 数据使用口令加密
- /Adobe.PubSec 数据使用证书加密
- …
2.7.3 /DecodeParms
可选,Filter的参数,dictionary或dictionary array
2.7.4 /F
可选,描述外部文件,存在此参数时
2.7.5 /FFilter
可选,外部文件的Filter
2.7.6 /FDecodeParms
可选,外部文件的Filter的参数
2.7.7 /DL
可选,integer,解压缩之后的数据块长度
2.8 null
表示空值
2.9 indirect
间接对象,以“索引号 版本号 obj”开头,以“endobj”结束,任意object都能封装成一个indirect,引用indirect方式为“索引号 版本号 R”
3.交叉引用表
交叉引用表保存了所有的indirect在文件中的偏移量,可以存在多个交叉引用表
3.1 trailer
从文件末开始查找“%%EOF”、“startxref”,位于两者之间的数值是交叉引用表在文件中的偏移量
trailer dictionary:
- /Size 交叉引用表中object的数量
- /Root Catalog dictionary的引用
- /Prev 可选,上一个交叉引用表的偏移量
- /Encrypt 可选,文档的加密dictionary
- /Info 可选,文档信息dictionary的indirect
- /ID 可选,文档的标识,必须是包含两个string的array
3.1 xref
交叉引用表以“xref\n从第几个object开始 一共多少个object\n”开头,后面的每一行都是一个引用,格式为“偏移量 版本号 f/n”,最后加上trailer
- f – free
- n – in use
3.2 Catalog
3.2.1 Catalog dictionary
文档目录
- /Type 类型,必须为/Catalog
- /Pages 页面树根的indirect
- /Version 可选,name,PDF的版本
- /PageLabels 可选,数字标签树
- /Names 可选,dictionary,名称字典
- /Dests 可选,dictionary indirect,名称字典对应的目的地
- /ViewerPreferences 可选,dictionary,PDF浏览器的首选项
- PageLayout 可选,name,指定页面布局,默认/SinglePage
- /SinglePage 一次显示一页
- /OneColumn 显示成一列
- TwoColumnLeft 显示成两列,左侧为奇数页
- /TwoColumnRight 显示成两列,右侧为奇数页
- /TwoPageLeft 一次显示两页,左边为奇数页
- TwoPageRight 一次显示两页,右边为奇数页
- PageMode 可选,name,如何显示页面,默认/UseNone
- /UseNone 不显示文档大纲和缩略图
- /UseOutlines 显示大纲
- /UseThumbs 显示缩略图
- /FullScreen 全屏
- /UseOC 显示OCG
- /UseAttachments 显示附加面板
3.2.2 页面树
用于描述页面结构
- /Type 类型,必须为/Pages
- /Parent 父节点,dictionary indirect
- /Kids 子节点,array
- /Count 子节点数,integer
3.2.3 页面对象
页面树的树叶
- /Type 必须为/Page
- /Parent 父级的indirect
- /LastModified 页面修改时间
- /Resources 此页面所需资源
- /MediaBox 页面边界矩形
- /Contents 页面的内容流
- /Annots 页面的注释
- /Metadata 页面的元数据流
3.3 线性化
PDF中一种特殊的文件结构
必须在文件的前1024个字节内包含一个线性化参数字典,必须在文件中使用hint流存储索引信息
3.3.1 线性化参数字典
- /Linearized 线性化格式的版本号 number
- /L 文件的长度 integer
- /H hint流的偏移量和长度 array
- /O 第一页页面对象编号 integer
- /E 第一页末尾的偏移量 integer
- /N 总页数 integer
- /T 主交叉引用表的偏移量 integer
- /P 可选,第一页的页码 integer
3.3.2 hint流
分为primary hint流和overflow hint流
- /S 共享object提示表
- /T 可选,缩略图提示表
- /O 可选,大纲提示表
- /A 可选,article thread提示表
- /E 可选,named destination提示表
- /V 可选,交互表单提示表
- /I 可选,文档信息提示表
- /C 可选,逻辑层次结构提示表
- /L Page label提示表
- /R 可选,Renditions name tree提示表
- /B 可选,嵌入文件流提示表
4.密码
密码需要在流字典中使用/Filter指定,算法主要使用RC4、AES,支持公钥
- /Filter 指定安全处理程序的名称,name
- /V 可选,指定加密算法,number
- 0 不受支持
- 1 使用AES或RC4,密码40位
- 2 使用AES或RC4,密码允许超过40位
- 3 未公开算法,密码40~128位
- 4 在文档中通过/CF、/StmF、/StrF指定规则
- /Length 可选,密码位长,范围40~128,默认40,integer
- /CF 可选,密码字典,name
- /StmF 可选,流密码Filter的名称,name
- /StrF 可选,字符串密码Filter的名称,name
4.1 /Standard
- /R 指定版本,number
- /O 基于作者和用户密码的32字节字符串,string
- /U 基于用户密码的32字节字符串,string
- /P 用户权限,integer
5. Optional Content Groups
PDF通过Optional Content Groups实现图层
- /Type 类型,必须为/OCG
- /Name OCG的名称,string
5.1 membership dictionary
- /Type 类型,必须为/OCMD
- /OCGs 控制可见状态,dictionary或array
5.2 properties dictionary
位于catalog的/OCProperties
- /OCGs OCG的indirect,array
- /D 初始状态,dictionary
- /Configs 特殊情况,array
5.3 Configuration Dictionaries
- /Name 配置的名称
- /BaseState 初始状态,默认值/ON
- /ON 打开所有的组
- /OFF 关闭所有的组
- /Unchanged 状态保持不变
- /ON 设置要打开的组
- /OFF 设置要关闭的组
6.图形对象
PDF提供了5种图形对象
- 路径对象 直线、矩形、贝塞尔曲线的组合
- 文本对象 由字符串构成
- 外部对象 引用在内容流外部(资源)的对象
- 内联图像对象 在内容流中的小图片
- 着色对象 描述颜色
6.1 坐标系
默认情况下,PDF使用二维坐标
6.1.1 设备空间
设备的坐标系
6.1.2 用户空间
PDF定义的一个设备无关的坐标系,在页面流字典中定义页面的可见矩形区域/CropBox,默认情况下,X向右,Y向上,/Rotate能旋转坐标系,/UserUnit定义了坐标系的单位长度,默认单位长度为1/72inch,CTM定义了用户空间到设备空间到转换,可以通过cm变换坐标系
6.1.3 其他坐标系
- text space
- glyph space
- image space
- form space
- pattern space
6.1.4 变换矩阵
PDF变换在齐次坐标系中进行计算,坐标使用行向量(x,y,1)表示,变换矩阵(a b c d e f)
在3D下同理
6.2 图形状态
6.2.1 设备无关的图形状态
CTM | array | 当前转换矩阵,从用户坐标映射到设备坐标,通过cm操作进行修改,初始值为将默认用户坐标转换为设备坐标的矩阵 |
clipping path | (internal) | 当前裁剪路径,定义所有输出要裁剪的边界,初始值为页面的整个可成像部分的边界 |
color space | name或array | 当前颜色空间,选择解析颜色的空间,初始值为/DeviceGray |
color | (various) | 当前颜色,选择用于绘图的颜色,初始值为black |
text state | (various) | 绘制文本所需的参数 |
line width | number | 路径宽度,初始值1.0 |
line cap | integer | 路径端点形状,初始值0 |
line join | integer | 路径连接样式,初始值0 |
miter limit | number | 路径斜接的最大长度,初始值10.0,用于低于11.5度的斜接 |
dash pattern | array和number | 虚线样式,默认值:一条实线 |
rendering intent | name | 转换CIE颜色的方法,默认值:/RelativeColorimetric |
stroke adjustment | boolean | 是否使用光栅化,初始值:false |
blend mode | name或array | 混合模式,初始值:/Normal |
soft mask | dictionary或name | 指定蒙版形状、透明度,初始值:/None |
alpha constant | number | alpha常量,初始值:1.0 |
alpha source | boolean | true alpha常量为形状 false alpha常量为透明度 初始值:false |
6.2.2 设备相关的图形状态
overprint | boolean | 设备是否支持叠印,初始值:false |
overprint mode | number | 指定CMYK颜色空间中0的含义 0 删除分量 1 保持不变 初始值:0 |
black generation | function or name | RGB转CMYK时生成黑色的算法,初始值:/installation-dependent |
undercolor removal | function or name | 减少CMY的分量使用K补偿,初始值:/installation-dependent |
transfer | function, array, or name | 调整灰度或颜色分量来补偿设备的非线性响应,初始值:/installation-dependent |
halftone | dictionary, stream, or name | 用于灰色和彩色渲染的网屏,初始值:/installation-dependent |
flatness | number | 渲染曲线的精度,初始值:1.0 |
smoothness | number | 渐变色精度,初始值:/installation-dependent |
6.2.3 图形状态栈
- q 将图形状态的副本压入栈
- Q 将图形状态从栈中弹出并恢复
6.2.4 图形状态参数
线宽
最小单位:1设备像素
线条端点样式
线条连接样式
斜接长度
线条虚线模式
6.2.5 图形状态操作符
q | 保持图形状态 | |
Q | 还原图形状态 | |
a b c d e f | cm | 当前投影矩阵 |
线宽 | w | 设置线宽 |
线条端点样式 | J | 设置线条端点样式 |
线条连接样式 | j | 设置线条连接样式 |
斜接长度 | M | 设置斜接长度 |
虚线数组 虚线相位 | d | 设置虚线样式 |
意图 | ri | 设置颜色渲染意图 |
平面度 | i | 设置平面度公差 |
字典名称 | gs | 设置图形状态参数 |
6.2.6 图形状态参数字典
/Type | name | 必须为/ExtGState |
/LW | number | 线宽 |
/LC | integer | 线条端点样式 |
/LK | integer | 线条连接样式 |
/ML | number | 斜接长度 |
…
6.2.7 路径构建和绘制
路径构造操作符
第一个操作符必须是m/re,S/F/B表示结束
x y | m | 移动到(x,y) |
x y | l | 从当前点到(x,y)画一条直线 |
x1 y1 x2 y2 x3 y3 | c | 画一条贝塞尔曲线 |
x2 y2 x3 y3 | v | 画一条贝塞尔曲线 |
x1 y1 x3 y3 | y | 画一条贝塞尔曲线 |
h | 关闭当前子路径 | |
x y 宽 高 | re | 画一个矩形子路径 |
路径绘制操作符
S | 画线 |
s | 关闭并画线,等同于h s |
f | 使用非零环绕数规则填充路径 |
F | 相当于f |
f* | 使用奇偶规则填充路径 |
B | 使用非零环绕数规则填充然后绘制线条 |
B* | 使用奇偶规则填充然后绘制线条 |
b | 关闭、使用非零环绕数规则填充然后绘制线条,等同于h B |
b* | 关闭、使用奇偶规则填充然后绘制线条,等同于h B* |
n | 结束路径 |
裁剪路径操作符
W | 将当前路径的相交部分作为裁剪路径,使用使用非零环绕数规则确定区域 |
W* | 将当前路径的相交部分作为裁剪路径,使用奇偶规则确定区域 |
6.2.8 颜色空间
颜色空间家族
- 设备颜色空间 DeviceGray、DeviceRGB、DeviceCMYK
- 基于CIE的颜色空间 CalGray、CalRGB、Lab、ICCBased
- 特殊颜色空间 Pattern、Indexed、Separation、DeviceN
设置颜色空间
- 内容流内
- CS 设置画笔颜色空间
- cs 设置非画笔颜色空间
- 外部 使用/ColorSpace设置
颜色操作符
name | CS | 设置笔刷的颜色空间,将颜色设置为初始值 /DeviceGray/DeviceRGB/CalGray/CalRGB/Indexed 初始颜色为0 DeviceCMYK 初始颜色为[0.0 0.0 0.0 1.0] /Lab或基于ICC 所有通道初始颜色为0 /Separation/DeviceN 所有通道初始颜色为1 /Pattern 初始颜色为图章 |
name | cs | 效果与CS相同,用于非笔刷 |
c1…cn | SC | 设置笔刷颜色,用于设备、基于CIE、索引颜色空间 /DeviceGray/CalGray/Indexed n=1 /DeviceRGB/CalRGB/Lab n=3 /DeviceCMYK n=4 |
c1…cn | SCN | 与SC相同,支持/Pattern/Separation/DeviceN/ICCBased |
c1…cn name | SCN | |
c1…cn | sc | 与SC相同,应用于非笔刷 |
c1…cn | scn | 与SCN相同,应用于非笔刷 |
c1…cn name | scn | |
gray | G | 设置笔刷颜色,用于/DeviceGray/DefaultGray |
gray | g | 与G相同,应用于非笔刷 |
r g b | RG | 设置笔刷颜色,用于/DeviceRGB/DefaultRGB |
r g b | rg | 与RG相同,应用于非笔刷 |
c m y k | K | 设置笔刷颜色,用于/DeviceCMYK/DefaultCMYK |
c m y k | k | 与K相同,应用于非笔刷 |
6.2.9 图案
包括平铺图案和着色图案
平铺图案
Type | name | 可选,描述类型,必须为/Pattern |
PatternType | integer | 图案类型,平铺图案必须为1 |
PaintType | integer | 图案颜色 1 彩色 2 未着色 |
TilingType | integer | 贴片间距 1 恒定间距 2 不失真 3 恒定间距和快速平铺 |
BBox | rectangle | 边界 |
XStep | number | 水平间距 |
YStep | number | 垂直间距 |
Resources | dictionary | 资源字典 |
Matrix | array | 图案矩阵,默认值[1 0 0 1 0 0] |
着色图案
Type | name | 可选,描述类型,必须为/Pattern |
PatternType | integer | 图案类型,着色图案必须为2 |
Shading | dictionary or stream | 定义渐变填充的对象 |
Matrix | array | 图案矩阵 |
ExtGState | dictionary | 图形状态字典 |
着色操作符
name | sh | 根据剪切路径,绘制着色字典的形状、颜色 |
着色字典
ShadingType | integer | 着色类型 Function-based shadings (type 1) 使用数学函数定义颜色 Axial shadings (type 2) 使用直线定义颜色混合 Radial shadings (type 3) 使用两个圆定义颜色混合 Free-form Gouraud-shaded triangle meshes (type 4) 使用三维应用程序表示颜色和形状 Lattice-form Gouraud-shaded triangle meshes (type 5) 与type 4相同,顶点使用伪矩形格 Coons patch meshes (type 6) 从一/多个面片构建,面片由三次贝塞尔曲线指定 Tensor-product patch meshes (type 7) 与type 6相同,每个面片增加了额外的控制点 |
ColorSpace | name or array | 指定颜色空间 |
Background | array | 指定背景颜色 |
BBox | rectangle | 指定边界矩形 |
AntiAlias | boolean | 开启抗锯齿 |
Type 1 (Function-Based)
Domain | array | [xmin xmax ymin ymax]指定矩形坐标域 |
Matrix | array | 指定变换矩阵 |
Function | function | 着色函数 x,y → 颜色(c1…cn) x,y → 颜色数组 |
Type 2 (Axial)
Coords | array | [x0 y0 x1 y1]指定轴的起点和终点 |
Domain | array | [t0 t1]指定变量的范围,默认值:[0.0 1.0] |
Function | function | 着色函数 t → 颜色(c1…cn) t → 颜色数组 |
Extend | array | 指定是否将着色延伸到轴的起点和终点之外,默认值:[false false] |
Type 3 (Radial)
Coords | array | [x0 y0 r0 x1 y1 r1]指定两个圆 |
Domain | array | [t0 t1]指定变量的范围,默认值:[0.0 1.0] |
Function | function | 着色函数 t → 颜色c1…cn t → 颜色数组 |
Extend | array | 指定是否将着色延伸到两个圆之外,默认值:[false false] |
Type 4 (Free-Form Gouraud-Shaded Triangle Meshes)
BitsPerCoordinate | integer | 每个顶点坐标使用位数,有效值为:1、2、4、8、12、16、24、32 |
BitsPerComponent | integer | 每个颜色通道使用位数,有效值为:1、2、4、8、12、16、24、32 |
BitsPerFlag | integer | 每个顶点的边标准的位数 |
Decode | array | [xmin xmax ymin ymax c1,min c1,max … cn,min cn,max]指定顶点坐标映射到颜色通道的值范围 |
Function | function | 着色函数 t → 颜色c1…cn t → 颜色数组 |
Type 5 (Lattice-Form Gouraud-Shaded Triangle Meshes)
BitsPerCoordinate | integer | 每个顶点坐标使用位数,有效值为:1、2、4、8、12、16、24、32 |
BitsPerComponent | integer | 每个颜色通道使用位数,有效值为:1、2、4、8、12、16、24、32 |
BitsPerFlag | integer | 每个顶点的边标准的位数,大于等于2 |
Decode | array | [xmin xmax ymin ymax c1,min c1,max … cn,min cn,max]指定顶点坐标映射到颜色通道的值范围 |
Function | function | 着色函数 t → 颜色c1…cn t → 颜色数组 |
Type 6 (Coons Patch Meshes) / Type 7 (Tensor-Product Patch Meshes)
BitsPerCoordinate | integer | 每个顶点坐标使用位数,有效值为:1、2、4、8、12、16、24、32 |
BitsPerComponent | integer | 每个颜色通道使用位数,有效值为:1、2、4、8、12、16、24、32 |
BitsPerFlag | integer | 每个顶点的边标准的位数 |
Decode | array | [xmin xmax ymin ymax c1,min c1,max … cn,min cn,max]指定顶点坐标映射到颜色通道的值范围 |
Function | function | 着色函数 t → 颜色c1…cn t → 颜色数组 |
6.2.10 外部对象
- 图片
- 表单
- PostScript
name | Do | 绘制指定的XObject |
6.2.11 图像
- 外部图像
- 内联图像
图像字典
Type | name | 可选,必须为/XObject |
Subtype | name | 必须为/Image |
Width | integer | 图像宽度 |
Height | integer | 图像高度 |
ColorSpace | name or array | 颜色空间 |
BitsPerComponent | integer | 每个颜色通道位数 |
Mask | stream or array | 图像掩码 |
备选图像
Image | stream | 备选图像 |
DefaultForPrinting | boolean | 指示打印的默认版本 |
OC | dictionary | optional content group或optional content membership dictionary |
遮罩图像
- 图片字典的/ImageMask
- 图片字典的/Mark
- /Mark指定颜色范围
内联图像
BI | 内联图像的开始 |
ID | 内联图像数据的开始 |
EI | 内联图像的结束 |
BI
...键值对...
ID
...图像数据...
EI
BitsPerComponent | BPC |
ColorSpace | CS |
Decode | D |
DecodeParms | DP |
Filter | F |
Height | H |
ImageMask | IM |
Intent | |
Interpolate | I |
Width | W |
DeviceGray | G |
DeviceRGB | RGB |
DeviceCMYK | CMYK |
Indexed | I |
6.2.12 表单XObject
用途
- 页面模板
- 图像元素
- Group XObject
- Reference XObject
表单字典
Type | name | 可选,必须为/XObject |
Subtype | name | 必须为/Form |
FormType | integer | XObject类型,有效值:1 |
BBox | rectangle | 边界 |
Resources | dictionary | XObject所需资源 |
Group XObject
Type | name | 可选,必须为/Group |
S | name | 子类型,有效值:/Transparency |
Reference XObjects
F | file specification | 要包含的PDF文件 |
Page | integer or text string | 文件的页数或者页面标签 |
ID | array | 文件标识符 |
6.3 文本
包括:
- 文本状态
- 文本对象和操作符
- 文本数据结构
6.3.1 字体的组织与使用
展现文本
BT
/F13 12 Tf
288 720 Td
(ABC) Tj
ET
- BT 文本输出开始
- Tf 文本字体
- Td 文本位置
- Tj 文本内容
- ET 文本结束
6.3.2 文本状态参数和操作符
文本状态参数
Tc | 字间距 |
Tw | 词符间距 |
Th | 水平缩放 |
Tl | 行间距 |
Tf | 文本字体 |
Tfs | 文本字体大小 |
Tmode | 文本渲染模式 |
Trise | 文本上下标 |
Tk | Knockout |
文本状态操作符
charSpace | Tc | 设置字间距 |
wordSpace | Tw | 设置词间距 |
scale | Tz | 设置水平缩放 |
leading | TL | 设置行间距 |
font size | Tf | 设置字体 |
render | Tr | 设置渲染模式 |
rise | Ts | 设置文本上下标 |
字间距
水平书写,Tc为正数,距离变大,而对于垂直书写,Tc为负数,距离变大
词间距
水平书写,Tw为正数,距离变大,而对于垂直书写,Tw为负数,距离变大
水平缩放
百分比数值,100表示正常宽度,高于100,放大字形,低于100,缩小字形
行间距
文本渲染模式
0 | 填充 | |
1 | 描边 | |
2 | 填充+描边 | |
3 | 隐藏 | |
4 | 填充+裁剪 | |
5 | 描边+裁剪 | |
6 | 填充+描边+插件 | |
7 | 裁剪 |
文本上下标
(This text is ) Tj 5 Ts (superscripted) Tj | This text is superscripted |
(This text is ) Tj –5 Ts (subscripted) Tj | This text is subscripted |
(This ) Tj –5 Ts (text )Tj 5 Ts (moves ) Tj 0 Ts (around) Tj | This text moves around |
6.3.3 文本对象
- Tm 文本矩阵
- Tlm 文本行矩阵
- Trm 文本渲染矩阵
文本定位操作符
tx ty | Td | 下一行开头与当前行开头的偏移量(tx, ty) |
tx ty | TD | 等效于 -ty TL tx ty Td |
a b c d e f | Tm | 设置Tm、Tlm矩阵 |
T* | 等效于 0 Tl Td |
文本显示操作符
string | Tj | 显示字符串 |
string | ‘ | 等效于 T* string Tj |
aw ac string | “ | 等效于 aw Tw ac Tc string ‘ |
array | TJ | 显示一/多个文本字符,如果是字符串,则显示字符串,如果是数字,则调整Tm |
6.3.4 字体数据结构
Type 0 | /Type0 | 由CIDFont组成的字体 |
Type 1 | /Type1 | 使用Type 1字体 |
/MMType1 | multiple master font | |
Type 3 | /Type3 | 使用PDF内置操作符定义的字体 |
TrueType | /TrueType | 使用TrueType字体 |
CIDFont | /CIDFontType0 | 基于Type 1的CIDFont |
/CIDFontType2 | 基于TrueType的CIDFont |
6.3.5 简单字体
Type 1
Type | name | 必须为/Font |
Subtype | name | 必须为/Type1 |
BaseFont | name | 字体的PostScript名称 |
FirstChar | integer | 字体的Widths数组中第一个字符的编码 |
LastChar | integer | 字体的Widths数组中最后一个字符的编码 |
Widths | array | 每个字符编码的字形宽度数组 |
FontDescriptor | dictionary | 字体描述字典 |
标准Type 1字体
- Times−Roman
- Times−Bold
- Times−Italic
- Times−BoldItalic
- Helvetica
- Helvetica−Bold
- Helvetica−Oblique
- Helvetica−BoldOblique
- Courier
- Courier−Bold
- Courier−Oblique
- Courier−BoldOblique
- Symbol
- ZapfDingbats
Multiple Master Fonts
- /Subtype为/MMType1
- /BaseFont变量名中的空格替换成_
TrueType
- /Subtype为/TrueType
- /BaseFont 如果TrueType的“name”表包含PostScript名称,则使用该名称,如果“name”表中没有这样的条目,则PostScript名称应来自主机操作系统中对应字体的名称。在Windows系统中,名称应基于LOGFONT结构中的lfFaceName字段,在Mac OS中,名称应读取FOND 的名称,如果名称中包含空格,则应删除空格。
Type 3
Type | name | 必须为/Font |
Subtype | name | 必须为/Type3 |
FontBBox | rectangle | 边界 |
FontMatrix | array | 字体矩阵 |
CharProcs | dictionary | 键为字符名,值为内容流 |
Encoding | name or dictionary | 编码字典 |
Resources | dictionary | 资源字典 |
Type 3字体操作符
wx wy | d0 | 设置符号宽度信息 |
wx wy llx lly urx ury | d1 | 设置字形的宽度和边界框 |
编码字典
Type | name | 可选,必须为/Encoding |
BaseEncoding | name | 基本编码 |
6.3.6 复合字体
CIDSystemInfo字典
Registry | ASCII string | 字体作者 |
Ordering | ASCII string | 注册表中字符集合的名称 |
Supplement | integer | 字符集合的补充编号 |
CIDFonts
Type | name | 必须为/Font |
Subtype | name | /CIDFontType0或/CIDFontType2 |
BaseFont | name | CIDFont的PostScript名称 |
CIDSystemInfo | dictionary | 包含定义CIDFont字符集合的字典 |
FontDescriptor | dictionary | 字体描述符 |
嵌入式CMap
Type | name | 必须为/CMap |
CMapName | name | CMap的PostScript名称 |
CIDSystemInfo | dictionary | 包含定义CIDFont字符集合的字典 |
WMode | integer | CIDFont的写入模式 0 水平 1 垂直 |
CMap操作符
- CMap以begincmap开始,以endcmap结束
- usecmap合并指定CMap文件
- codespace ranges以begincodespacerange开始,以endcodespacerange结束
- usefont指定字体编号,在pdf中必须为0
- beginbfchar和endbfchar定义单个输入字符代码到相关字体中字符代码或字符名称的映射
- begincidchar和endcidchar定义了单个输入字符代码到相关CIDFont中CID的映射,begincidrange and endcidrange是范围输入
- beginnotdefchar、endnotdefchar、beginnotdefrange和endnotdefrange定义从未定义字符代码到CID的映射
Type 0
/Type | name | 必须为/Font |
/Subtype | name | 必须为/Type0 |
/BaseFont | name | 字体的PostScript名称 |
/Encoding | name or stream | CMap |
/DescendantFonts | array | CIDFont字典 |
6.3.7 字体描述符
Type | name | 必须为/FontDescriptor |
FontName | name | 字体的PostScript名称 |
Flags | integer | 字体特征flag |
FontBBox | rectangle | 字体边界 |
ItalicAngle | number | 倾斜角度 |
字体描述符Flags
1 | FixedPitch | 所有字形都具有相同的宽度 |
2 | Serif | 使用衬线 |
3 | Symbolic | 字体包含Adobe标准拉丁字符集之外的字形 |
4 | Script | 字形类似草书手写体 |
6 | Nonsymbolic | 字体使用Adobe标准拉丁字符集或其子集 |
7 | Italic | 斜体 |
17 | AllCap | 字体不包含小写字母 |
18 | SmallCap | 字体包含大小写字母 |
19 | ForceBold | 在非常小的字号下使用额外像素绘制粗体字形 |