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

如何计算PDF内指定文本的对应坐标以在匹配位置绘制覆盖图像?

PDF文本位置变换计算方案

问题核心原因

你直接使用Tm内的坐标调用绘制接口,没有叠加外层累积的当前变换矩阵(CTM),才会出现位置大幅偏移的问题。

变换规则拆解

PDF所有坐标变换遵循矩阵右乘规则,你给出的片段里涉及两层有效变换:

  1. 页面级CTM变换:最开头的cm操作给出的矩阵为[0.75, 0, 0, -0.75, 0, 841.920044],PDF矩阵用6参数[a,b,c,d,e,f]表示,对应坐标变换公式为:
    最终X = a * 输入X + c * 输入Y + e
    最终Y = b * 输入X + d * 输入Y + f
    
    这个矩阵做了三个操作:X/Y轴统一缩放0.75倍、Y轴方向翻转(适配多数绘图API左上角原点、Y向下的坐标系)、Y轴偏移页面高度,将原点从PDF默认的左下角移到左上角。
  2. 文本矩阵变换:BT/ET块内的Tm给出的文本用户空间原点为(49.12, 304.8),这是文本基线在未应用CTM的用户空间内的坐标。

正确坐标计算步骤

把文本原点代入CTM变换公式即可得到绘制用的实际坐标:

  • 实际X坐标:0.75 * 49.12 + 0 * 304.8 + 0 ≈ 36.84
  • 实际Y坐标:0 * 49.12 + (-0.75) * 304.8 + 841.92 ≈ 613.32
    你可以用gfx.DrawImage(foo, 36.84, 613.32, 7.5, 7.5)测试位置匹配度,尺寸乘0.75是适配全局缩放要求。

误差调整注意点

  • 上面计算的是文本基线位置,如果你需要覆盖到文本正上方,需要减去字体的上升量:13.33pt字体的上升量一般为10pt左右,变换后对应减去10 * 0.75 = 7.5pt即可
  • 如果你的绘图上下文已经提前应用了页面级CTM,不需要重复计算变换,直接调整文本Y轴翻转的偏移量即可
  • 如果你渲染PDF时设置了非72的DPI,最终坐标还要乘以自定义DPI / 72的缩放系数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:24:03