你熟悉你正在使用的PostScript代碼?還是隻是盲目地從某個地方複製粘貼?如果你想了解它,你應該谷歌的「PostScript語言參考」或「紅皮書」或「PLRM」。這些資源以Adobe的PDF格式提供。
您的PostScript片段使用以下步驟:在堆棧的頂部
(test)
地方字符串「測試」。
dup
複製堆棧中最頂端的項目。 (現在你將有兩次串在棧上。)
stringwidth
。執行此運算符後,最頂端的「test」字符串將被使用,並且兩個值將被添加到堆棧中:字符串的高度(最頂端)和字符串的寬度(頂端第二個)。 [更新:其實,「串的高度」是不完全正確的 - 這是相當垂直當前點的偏移整理繪製字符串後面...]
- 接下來,使用
pop
。這只是刪除堆棧中最高的值。現在只有字符串的寬度保持在堆棧的頂部。
2 div
除以2該值和離開結果(一半stringwidth)。
neg
否定堆棧上的最高值。現在負值是最上面的堆棧。
0
將值「0」放在堆棧頂部。
rmoveto
然後消費該堆棧上的最上面的2個值,並通過該距離(半字符串的寬度)向左移動的當前點。
show
消耗了保持所有的時間在堆棧的底部,「顯示」,它的第一個「試驗」的字符串。
那麼什麼工作要考慮到該字符串的高度?嘗試爲您的最後一行:
200 700 moveto (test) dup true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch 200 700 moveto rmoveto show"
理解我的變化仰望的charpath
,div
,exch
,pathbbox
,roll
和sub
運營商在紅皮書中的含義。
此命令使用的Ghostscript從代碼在Windows上創建一個PDF文件(更容易查看和檢查結果):
gswin32c.exe^
-o my.pdf^
-sDEVICE=pdfwrite^
-c "/Helvetic-Oblique findfont 10 scalefont setfont 200 700 1 0 360 arc fill 0 0 moveto (test test) dup true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch 200 700 moveto rmoveto show"
在Linux上使用:
gs \
-o my.pdf \
-sDEVICE=pdfwrite \
-c "/Helvetic-Oblique findfont 10 scalefont setfont 200 700 1 0 360 arc fill 0 0 moveto (test test) dup true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch 200 700 moveto rmoveto show"
更好的可讀形式是:
gswin32c^
-o my.pdf^
-sDEVICE=pdfwrite^
-c "/Helvetic-Oblique findfont 10 scalefont setfont"^
-c "200 700 1 0 360 arc fill 0 0 moveto (test test) dup"^
-c "true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll"^
-c "sub 2 div exch 200 700 moveto rmoveto show"
和
gs \
-o my.pdf \
-sDEVICE=pdfwrite \
-c "/Helvetic-Oblique findfont 10 scalefont setfont" \
-c "200 700 1 0 360 arc fill 0 0 moveto (test test) dup" \
-c "true charpath pathbbox 3 -1 roll sub 2 div neg 3 1 roll" \
-c "sub 2 div exch 200 700 moveto rmoveto show"
+1對於PostScript的很好的解釋。 – DaveB 2010-09-08 15:16:38