You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PDF内部结构中添加基线偏移(下标/上标)信息及处理SVG tspan属性?

手动构建PDF内部结构时实现文本基线偏移(上标/下标)的方案

一、PDF原生实现基线偏移的两种方式

PDF没有专门的字典条目存储基线偏移(类似/fontdescriptor存储字体信息),而是通过文本操作符在内容流中动态调整文本位置或状态:

1. 临时调整文本位置(Td/TD操作符)

通过Td操作符移动当前文本位置,输出偏移文本后再移回原位置,适合局部上标/下标:

  • 语法:Tx Ty Td(Tx为水平偏移,Ty为垂直偏移,正值向上,负值向下)
  • 示例(输出H₂O,字体大小12pt):
BT
/F1 12 Tf          % 加载字体F1,设置字号12pt
100 700 Td         % 初始文本位置(x=100, y=700)
(H) Tj             % 输出正常文本"H"
0 -3 Td            % 向下偏移3pt(下标)
(2) Tj             % 输出下标"2"
0 3 Td             % 移回原基线位置
(O) Tj             % 输出正常文本"O"
ET

2. 设置文本状态偏移(Ts操作符)

Ts操作符直接定义全局文本基线偏移,后续所有文本都会应用该偏移,直到被重置:

  • 语法:value Ts(value为偏移量,正值上标,负值下标)
  • 示例:
BT
/F1 12 Tf
100 700 Td
(H) Tj
-3 Ts              % 设置下标偏移-3pt
(2) Tj
0 Ts               % 重置偏移为0
(O) Tj
ET

二、SVG tspan的baseline-shift属性转换方案

SVG的baseline-shift支持关键字、百分比、长度三种值,需先转换为PDF的用户空间单位,再通过上述操作符实现:

1. 属性值转换规则

  • 关键字:sub(下标)对应字体大小的-1/3左右;super(上标)对应字体大小的1/3左右(可根据视觉效果微调)。
  • 百分比:基于当前字体大小计算,如20% → 字体大小 × 0.2,-15% → 字体大小 × (-0.15)。
  • 长度单位:em直接乘以字体大小(如0.3em → 12pt × 0.3 = 3.6pt);px默认映射为1用户单位(若有SVG视图缩放需同步调整)。

2. 缓冲区实现示例

假设SVG中有:

<text x="10" y="50" font-size="12">H<tspan baseline-shift="sub">2</tspan>O</text>

对应的PDF内容流缓冲区片段:

BT
/F1 12 Tf
10 50 Td
(H) Tj
0 -4 Td            % 12pt的1/3为4pt,向下偏移实现下标
(2) Tj
0 4 Td
(O) Tj
ET

内容的提问来源于stack exchange,提问作者user369287

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 10:01:03