“内容流(content stream)”是 PDF 绘制页面的核心部分,它由一连串的**操作符(operators)和操作数(operands)**组成,用来描述页面的绘制过程。
这些操作符主要分为几大类,用来绘制路径、文字、图像、颜色、外部对象、图形状态控制等。
本文按类别整理出常见的内容流操作符,并给出每类的功能与示例,帮助你从整体上把握 PDF 的绘制机制。
一、路径(Path)相关操作符
用于绘制几何图形(线条、多边形、曲线、矩形等)。
| 操作符 | 含义 | 示例 |
|---|
m | moveto:移动到起点 | 100 100 m |
l | lineto:从当前点画线到指定点 | 200 100 l |
c | curveto:绘制三次贝塞尔曲线(3 控制点) | 100 100 150 200 200 100 c |
v / y | 两种简写形式的曲线绘制 | v:省略第一个控制点;y:省略最后一个控制点 |
h | closepath:闭合路径 | |
re | rectangle:绘制矩形 | 0 0 100 200 re |
S | stroke:描边路径 | |
f / F | fill:填充路径 | |
f* | 填充(偶数-奇数规则) | |
B / B* | 填充并描边 | |
n | 结束路径但不绘制 | |
二、颜色与颜色空间(Color)操作符
| 操作符 | 含义 | 示例 |
|---|
CS / cs | 设置描边 / 非描边颜色空间 | /DeviceRGB CS |
SC / sc | 设置描边 / 非描边颜色值 | 1 0 0 SC(红色) |
SCN / scn | 扩展版本(支持模式、渐变等) | |
G / g | 设置灰度(描边/填充) | 0.5 g |
RG / rg | 设置 RGB 颜色 | 1 0 0 rg(红) |
K / k | 设置 CMYK 颜色 | 0 1 1 0 k(黄) |
三、文字(Text)操作符
| 操作符 | 含义 | 示例 |
|---|
BT / ET | 开始 / 结束文字对象 | BT ... ET |
Tf | 设置字体与字号 | /F1 12 Tf |
Td / TD | 移动文本位置 | 20 0 Td |
Tm | 设置文本矩阵 | 1 0 0 1 100 100 Tm |
Tj | 显示字符串 | (Hello) Tj |
TJ | 显示数组(可控制字符间距) | |
' / " | 显示文本并移动下一行 | |
Tr | 文本绘制模式(填充、描边、剪切等) | |
Ts | 文本上升(上标/下标) | |
Tw / Tc | 字距、字符间距 | |
TL | 行距(leading) | |
Tz | 水平缩放 | |
T* | 移动到下一行 | |
四、图像与外部对象(XObject)
| 操作符 | 含义 | 示例 |
|---|
/Im1 Do | 绘制图像对象(Image XObject) | /Im1 Do |
/Fm1 Do | 绘制表单对象(Form XObject) | /Fm1 Do |
BI ... EI | 内联图像(Inline Image) | |
ID | 内联图像数据开始标志 | |
五、图形状态(Graphics State)
控制颜色、线宽、透明度、裁剪区域等状态。
| 操作符 | 含义 | 示例 |
|---|
q / Q | 保存 / 恢复图形状态(类似 canvas save/restore) | |
cm | 当前坐标变换矩阵 | 1 0 0 1 100 100 cm(平移) |
w | 线宽 | 2 w |
J / j | 线端 / 线角样式 | |
d | 虚线样式 | |
i | 平滑度容差 | |
gs | 应用图形状态字典(/ExtGState) | |
W / W* | 设置裁剪路径 | |
ri | 渲染意图(Rendering Intent) | |
ca / CA | 填充 / 描边透明度 | |
六、阴影与图案(Shading & Patterns)
| 操作符 | 含义 |
|---|
sh | 绘制阴影对象(Shading) |
cs / CS | 设置图案颜色空间 |
scn / SCN | 设置图案或颜色参数 |
七、标记内容与分组(Marked Content / Group)
| 操作符 | 含义 |
|---|
BMC / BDC | 开始标记内容区块 |
EMC | 结束标记内容 |
MP | 标记点(Marked Point) |
这些在结构化 PDF(Tagged PDF)或无障碍文档中用于语义标记。
八、注释与动作相关(少见)
| 操作符 | 含义 |
|---|
Do | 通用外部对象绘制(Image、Form、PS) |
BX / EX | 兼容性包裹区块(Compatibility Section) |
九、示例综合(一个简化的页面内容流)
q
1 0 0 1 50 700 cm
/F1 18 Tf
(Hello PDF) Tj
Q
q
0.5 0.5 0.5 rg
100 600 200 100 re
f
Q
/Fm1 Do
这个小示例表示:
- 保存状态 → 绘制文本;
- 再保存状态 → 绘制灰色矩形;
- 调用
/Fm1 的 Form XObject。