在 Ghostscript / Postscript 中查找字体下降部分的大小(以磅为单位)?

在 Ghostscript / Postscript 中查找字体下降部分的大小(以磅为单位)?

我想在一些文本的正下方放置一条水平线。是否可以确定 Ghostscript 中给定字体的基线和最低下降部分之间的距离,或者下降部分长度只是某些字符的属性,并且偏移量只能通过肉眼找到?

在下面的示例中,moveto 命令将 20pt 文本从图形上边缘移动到 20 点,长度为 20 点的垂直线(包括在内以进行比较)看起来与字体的基线相对应。

gs -q -o test.pdf -sDEVICE=pdfwrite -dDEVICEWIDTHPOINTS=200 -dDEVICEHEIGHTPOINTS=100 -c "newpath 27 80 moveto 27 100 lineto 0.5 setlinewidth stroke /Helvetica findfont 20 scalefont setfont 3 80 moveto (gijlpqy) 显示显示页面"

答案1

如果您想在给定字符串的下降部分下方绘制一条线,您可以使用pathbboxRidgy 在问题评论中提供的链接,但如果您希望与基线保持恒定距离,则必须使用字体边界FontBBox框是一个包围字体所有字符的矩形。

您需要按字体的 来缩放它FontMatrix。您可以在此处找到执行此操作的代码堆栈溢出jcomeau_ictx 的回答,并复制如下。将此定义添加到 PostScript 代码的开头:

/descender { currentfont dup /FontBBox get           % [llx lly urx ury]
             1 get                                   % lower-left-y
             exch /FontMatrix get                    % [...]
             3 get                                   % yscale
             mul } def

并在操作员之后使用它show。它将把从基线到字体边界框下边缘的 y 距离放入堆栈中。只需在其中添加画线代码即可,例如:

descender 0 exch  rmoveto  -100 0 rlineto  stroke

相关内容