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

如何获取Postscript字符串宽高并导出至外部主程序?

获取PostScript文本尺寸并返回主程序的方案

核心思路:用Ghostscript执行自定义脚本输出尺寸数据

PostScript是解释型语言,你可以编写专用脚本让Ghostscript执行,将文本宽高数据输出到标准输出,主程序再读取结果即可。

1. 如何用PostScript获取文本宽高

  • 宽度:用stringwidth运算符,语法为string font findfont setfont stringwidth,执行后栈顶会得到文本宽度(单位为PostScript点,1pt=1/72英寸)。
  • 高度:PostScript没有直接的文本高度运算符,但可以通过字体的FontBBox(字体边界框)计算。FontBBox包含四个值:左下x、左下y、右上x、右上y,文本高度为右上y - 左下y,获取方式是font findfont FontBBox,栈顶会弹出这四个数值。

2. 可输出数据的PostScript脚本示例

创建get_text_dimensions.ps脚本,内容如下:

% 设置目标字体和字号
/Helvetica 12 selectfont
% 定义要测量的文本
(Hello World) dup stringwidth  % 计算宽度,栈顶:宽度 文本
pop  % 弹出文本,保留宽度值
currentfont FontBBox  % 获取字体边界框,栈顶:bbox_x1 bbox_y1 bbox_x2 bbox_y2
4 1 roll pop pop  % 整理栈,仅保留bbox_y2和bbox_y1
sub  % 计算高度:bbox_y2 - bbox_y1
% 将宽高输出到标准输出,用空格分隔
== ( ) print ==

执行后Ghostscript会在控制台输出类似66.0 12.0的结果,对应示例文本的宽和高。

3. 主程序调用Ghostscript并读取结果

在主程序中通过系统命令执行Ghostscript,捕获标准输出内容即可。命令示例:

gs -q -dNOPAUSE -dBATCH -sDEVICE=nullpage get_text_dimensions.ps

参数说明:

  • -q:静默模式,减少冗余输出
  • -dNOPAUSE -dBATCH:执行完成后自动退出
  • -sDEVICE=nullpage:不生成输出文件,仅执行脚本逻辑

主程序解析捕获到的输出字符串,提取宽高数值后,就能用于文本重叠的计算处理。

4. 适配动态文本与字体的扩展

如果需要测量不同文本或字体,可在主程序中动态生成脚本内容,将文本、字体名、字号作为参数替换进脚本模板。例如动态脚本片段:

/%s %d selectfont
(%s) dup stringwidth pop
currentfont FontBBox 4 1 roll pop pop sub
== ( ) print ==

主程序只需替换%s和%d为实际的字体名、字号、文本内容即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:15:00