您可以使用stringwidth
获取当前字体中字符串的宽度,虽然这实际上会推动堆栈上的偏移坐标,但y值似乎总是无用的。有没有办法确定字符串的确切高度,可能包括也可能不包括下延?
答案 0 :(得分:6)
stringwidth
不会返回字符串的高度。 (在我查看的所有情况下,执行stringwidth
后堆栈上的第二个整数是0
- 对于在水平方向上运行的字符串。)stringwidth
给出当前点的相对坐标执行(string) show
后。
PLRM可以说stringwidth
:
请注意, stringwidth 返回的宽度定义为当前的移动 点。它与字形轮廓的尺寸无关。
那么考虑弦乐的高度会有什么效果呢?在PRLM中阅读的神奇词汇是charpath
和pathbbox
。试试这个:
%!
/Helvetica findfont 60 scalefont setfont
200 700 4 0 360 arc fill
200 700 moveto (test test) dup
true charpath pathbbox
3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch
1 0 0 setrgbcolor
200 700 moveto rmoveto show showpage
它计算字符串(以红色打印)的高度,并使用该信息尝试将一个小的实心圆圈(以黑色打印)居中到其边界框的中心:
答案 1 :(得分:4)
我已经在How to determine string height in PostScript?中回答了这个问题,但这里也很有用。
只需添加 pipitas 回答:
/textheight {
gsave % save graphic context
{
100 100 moveto % move to some point
(HÍpg) true charpath pathbbox % gets text path bounding box (LLx LLy URx URy)
exch pop 3 -1 roll pop % keeps LLy and URy
exch sub % URy - LLy
}
stopped % did the last block fail?
{
pop pop % get rid of "stopped" junk
currentfont /FontMatrix get 3 get % gets alternative text height
}
if
grestore % restore graphic context
} bind def
/jumpTextLine {
textheight 1.25 mul % gets textheight and adds 1/4
0 exch neg rmoveto % move down only in Y axis
} bind def
该方法需要设置某些字体。它适用于所选字体(setfont
)及其大小(scalefont
)。
我使用(HÍpg)获得最大的边界框,使用强调的大写字符和“下线”字符。结果很好。
替代方法从 dreamlax 的答案中窃取 - 某些字体不支持charpath
运算符。
保存和恢复图形上下文可以保持当前点,因此它不会影响文档的“流程”。
希望我帮助过。
答案 2 :(得分:3)
这似乎在大部分时间都有效:
/fontheight { currentfont /FontMatrix get 3 get } bind def
/lineheight { fontheight 1.2 mul } bind def
它不适用于所有/FontType
。