2

我使用以下 PostScript 代码将文本样本放在每个 PDF 页面上:

<<
   /EndPage {
   exch pop 2 lt { 
     gsave
     /Arial-Bold 120 selectfont
     .5 setgray 100 100 moveto 45 rotate (Sample) show
     grestore
     true}
     {false}
     ifelse
   } bind
>> setpagedevice

这会将文本放在 [100; 100] 位置。但我需要将此文本居中(会计文本旋转)。

如何在页面中心对齐这个45° 旋转的文本?

4

1 回答 1

3

您可以使用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)。

于 2012-10-04T05:18:19.177 回答