我想在一些文本的正下方放置一条水平线。是否可以确定 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
如果您想在给定字符串的下降部分下方绘制一条线,您可以使用pathbbox
Ridgy 在问题评论中提供的链接,但如果您希望与基线保持恒定距离,则必须使用字体边界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