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

PostScript文本轮廓与显示文本不匹配,如何获取精确Bounding Box?

PostScript文本轮廓与渲染结果不匹配的解决方案

核心问题

使用charpath生成的文本轮廓、计算的Bounding Box,与show命令渲染的文本形状/边界不一致,涉及Times-Italic、Courier、Helvetica等字体,在Ghostscript 10.04的pdfwrite设备下重现。

常见原因

  • 图形状态不一致:show与charpath执行时的字体设置、当前变换矩阵(CTM)、字符间距等状态未同步,导致轮廓计算基于错误的环境。
  • 路径残留干扰:调用charpath前未清空旧路径,导致新生成的字符轮廓与旧路径叠加,边界计算错误。
  • Ghostscript设备参数影响:pdfwrite默认保留字体对象而非转换为轮廓,设备内部的字体优化可能导致渲染与轮廓逻辑差异。

解决步骤

  1. 同步图形状态
    用gsave/grestore隔离show和charpath的执行环境,确保两者使用完全一致的字体、字号、变换矩阵:

    gsave
      /Times-Italic findfont 14 scalefont setfont
      150 200 moveto
      (Sample Text) show
    grestore
    
    gsave
      /Times-Italic findfont 14 scalefont setfont  % 完全复用相同的字体设置
      150 200 moveto
      newpath  % 重置路径,避免残留
      (Sample Text) charpath
      % 计算并绘制Bounding Box
      pathbbox 4 -1 roll moveto
      0 exch rlineto exch 0 rlineto 0 exch neg rlineto closepath
      0.5 setlinewidth [2 2] 0 setdash stroke
    grestore
    
  2. 调整Ghostscript命令参数
    添加-dNoOutputFonts强制将文本转换为路径输出,消除字体对象与轮廓的差异:

    gswin64c.exe -dNOSAFER -dNoOutputFonts -sDEVICE=pdfwrite -o C:\johanley\ProjectsPhoton\postscript-play\highlight-box.pdf C:\johanley\ProjectsPhoton\postscript-play\highlight-box.ps
    
  3. 使用精确边界计算
    依赖charpath后的pathbbox获取实际轮廓的边界,而非字体内置的FontBBox——斜体、变形字体的实际渲染边界往往与字体元数据中的BBox存在偏差。

关键注意事项

  • 执行charpath前必须调用newpath,否则旧路径会被包含到轮廓中,导致BBox计算错误。
  • 若涉及文本变换(如缩放、旋转),需确保show和charpath的CTM完全一致,避免因变换顺序差异导致的错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:05:09