PDF内容流中的常见操作符

113 阅读3分钟

“内容流(content stream)”是 PDF 绘制页面的核心部分,它由一连串的**操作符(operators)操作数(operands)**组成,用来描述页面的绘制过程。

这些操作符主要分为几大类,用来绘制路径、文字、图像、颜色、外部对象、图形状态控制等。
本文按类别整理出常见的内容流操作符,并给出每类的功能与示例,帮助你从整体上把握 PDF 的绘制机制。

一、路径(Path)相关操作符

用于绘制几何图形(线条、多边形、曲线、矩形等)。

操作符含义示例
mmoveto:移动到起点100 100 m
llineto:从当前点画线到指定点200 100 l
ccurveto:绘制三次贝塞尔曲线(3 控制点)100 100 150 200 200 100 c
v / y两种简写形式的曲线绘制v:省略第一个控制点;y:省略最后一个控制点
hclosepath:闭合路径
rerectangle:绘制矩形0 0 100 200 re
Sstroke:描边路径
f / Ffill:填充路径
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。