Fonts 如何确定PostScript字体的高度和深度?

Fonts 如何确定PostScript字体的高度和深度?,fonts,postscript,Fonts,Postscript,我正在寻找估计PostScript字体高度(上升空间)和深度(下降空间)的PostScript代码。字体的边框(fontbox)可以用于此操作吗` 下面是我的问题的一些背景:字体的字形位于基线上。很明显,带有下降器的图示符将到达基线以下,我想知道下降器可以到达基线以下多远,以便在布局中提供足够的空间 我看到了。我对给定字体的一般答案很感兴趣。您已经发现了两个“快捷方式”。FontBBox提供叠加在一起的字体中所有字形的边界框false charpath PLATTPATH PATHBOBOX给出

我正在寻找估计PostScript字体高度(上升空间)和深度(下降空间)的PostScript代码。字体的边框(
fontbox
)可以用于此操作吗`

下面是我的问题的一些背景:字体的字形位于基线上。很明显,带有下降器的图示符将到达基线以下,我想知道下降器可以到达基线以下多远,以便在布局中提供足够的空间


我看到了。我对给定字体的一般答案很感兴趣。

您已经发现了两个“快捷方式”。FontBBox提供叠加在一起的字体中所有字形的边界框
false charpath PLATTPATH PATHBOBOX
给出指定字符串的框

对于Type3(用户定义)字体,这是您可以合理预期的全部操作;但是对于更流行的Type1字体,字体和“metrics”文件(对于其他应用程序)中都有丰富的度量信息

但这部分我不太清楚。因此,我将阅读(在Adobe Type 1手册中)并在稍后扩展此答案

编辑:实际上,一般来说,这些可能是最好的方法

在/Private字典中的Type 1字体中,在名称/BlueValues下有一个垂直对齐值数组;但不能保证字体会尊重他们。数组中的第一个数字是基线超调量;这是像“O”这样的字母的底边,它位于基线之下。阵列中的最大值将是上升高度超调盖高度超调(以较高者为准)。但是,任何单个字符都可以在不考虑这些值的情况下打印(因此,不能保证)

另一方面,FontBBox本身可能反映字体中存在的任何“特殊”字符的边界框,无论它们是否可以通过编码向量访问(即,您不能
显示它们,但必须
字形显示它们)


因此,最好的选择可能是使用包含所有要使用的字符的字符串的
pathbox
。这将忽略可能出现但与您的目的无关的任何其他角色的贡献。不要忘了将路径展平,以从曲线上移除控制点(可能远远超出“真实”边界框)。

luser droog的答案看起来相当完整,无疑比我的答案更可靠,但我不满意这是为标准字体确定可用垂直空间的最简单方法,它允许我创建一个可行的
换行符
。以下是我的想法:

%!ps-nonconforming
/inch {72 mul} bind def
/Helvetica 10 selectfont
1 inch 10 inch moveto
/fontheight currentfont dup /FontBBox get dup 3 get % top
 exch 1 get sub % top - bottom
 exch /FontMatrix get 3 get mul def % adjusted by height multiplier
/lineheight fontheight 1.2 mul def % add 20% for line spacing
/newline {0 lineheight neg rmoveto} bind def % negate height to move downwards
gsave (lineheight: ) show lineheight 20 string cvs show grestore
newline gsave (that worked!) show grestore
showpage
使用
gs test.ps运行它的结果:


一天后,再次看到这个,意识到OP想要分开对待上升者和下降者。下面是使用下降器的示例:

%!ps-nonconforming
/inch {72 mul} bind def
/Helvetica 30 selectfont
1 inch 2 inch moveto
/descender currentfont dup /FontBBox get 1 get % bottom (negative number!)
 exch /FontMatrix get 3 get mul def % adjusted by height multiplier
% first draw a gray line at base of text
gsave 7.5 inch 0 rlineto 0.5 setgray stroke grestore
gsave (descender: ) show descender 20 string cvs show ( pixels) show grestore
gsave 0 descender 1 sub rmoveto  % one pixel below lowest descender
7.5 inch 0 rlineto 0 setgray stroke grestore
showpage
而gs-sDEVICE=pnggray-g640x480-o/tmp/downer.png-downer.ps的结果