您可以使用false charpath flattenpath pathbbox
来获取文本的边界框。如果当前点是0 0
您执行此操作的时间,则左下角坐标将非常接近 0 0
,因此右上角坐标描述了文本的宽度和高度。因此,您只需移动到所需的中心点并通过相对移动到 (-width/2, -height/2) 进行备份。
由于旋转中心也是中心点,因此您需要在旋转之前在那里平移。
%!
/w 612 def
/h 792 def
/Helvetica-Bold 120 selectfont
w .5 mul h .5 mul translate
0 0 moveto
(Sample) false charpath flattenpath pathbbox % llX llY urX urY
4 2 roll pop pop % urX urY
0 0 moveto
45 rotate
-.5 mul exch -.5 mul exch % -wid/2 -ht/2
rmoveto
(Sample) show
为了更准确,替换4 2 roll pop pop
为
exch % llX llY urY urX
4 1 roll % urX llX llY urY
exch sub % urX llX urY-llY
3 1 roll % urY-llY urX llX
sub exch % urX-llX urY-llY
然后该点可以在任何地方(但确实需要一个当前点,因为charpath
就像构建路径一样show
,即使pathbbox
立即破坏它;所以你需要某种moveto
)。