您可以使用stringwidth
獲取當前字體中字符串的寬度,雖然這實際上會將偏移座標推送到堆棧上,但y值總是看起來毫無用處。有沒有辦法來確定一個字符串的確切高度,可能包括或不包括下降?如何在PostScript中獲取字符串的高度指標?
10
A
回答
6
stringwidth
,就像它說的那樣,不返回字符串的高度。 (在我看過的所有情況中,在執行stringwidth
後,堆棧中的第二個整數爲0
- 對於水平方向運行的字符串。)stringwidth
給出執行(string) show
後的當前點的相對座標。
的PLRM具有這樣說stringwidth
:
注意,寬度由stringwidth返回被定義爲當前 點的運動。它與字形輪廓的尺寸無關。
那麼會考慮到字符串的高度呢?在PRLM中讀到的神奇詞是charpath
和pathbbox
。試試這個:
%!
/Helvetica findfont 60 scalefont setfont
200 700 4 0 360 arc fill
200 700 moveto (test test) dup
true charpath pathbbox
3 -1 roll sub 2 div neg 3 1 roll sub 2 div exch
1 0 0 setrgbcolor
200 700 moveto rmoveto show showpage
它計算字符串的(印在紅色)的高度,並使用該信息來嘗試和中心小實心圓(黑色印刷)到其邊框的中心:
3
這似乎是工作的大部分時間:
/fontheight { currentfont /FontMatrix get 3 get } bind def
/lineheight { fontheight 1.2 mul } bind def
它不會對所有/FontType
的工作。
4
我已經在How to determine string height in PostScript?回答了這個問題,但這裏也有用。
只是增加pipitas答案:
/textheight {
gsave % save graphic context
{
100 100 moveto % move to some point
(HÍpg) true charpath pathbbox % gets text path bounding box (LLx LLy URx URy)
exch pop 3 -1 roll pop % keeps LLy and URy
exch sub % URy - LLy
}
stopped % did the last block fail?
{
pop pop % get rid of "stopped" junk
currentfont /FontMatrix get 3 get % gets alternative text height
}
if
grestore % restore graphic context
} bind def
/jumpTextLine {
textheight 1.25 mul % gets textheight and adds 1/4
0 exch neg rmoveto % move down only in Y axis
} bind def
的方法需要一些字體已經設置。它適用於所選字體(setfont
)及其大小(scalefont
)。
我使用(HÍpg)獲得可能的最大邊界框,使用強調的大寫字符和「下線」字符。結果足夠好。
另一種方法從盜取dreamlax的答案 - 一些字體不支持charpath
運算符。
保存和恢復圖形上下文保持當前位置,所以它不會影響文檔的「流動」。
希望我幫了忙。
相關問題
- 1. 如何確定PostScript中的字符串高度?
- 2. 獲取SVG字符串的高度
- 3. 如何獲取字符串的像素寬度和高度?
- 4. 如何獲得java中字符串/字符的高度?
- 5. 獲取像素(PHP)中字符串的寬度和高度
- 6. 如何在Java中獲得真正的字符串高度?
- 7. 如何獲取字符串中的指定字符php
- 8. 如何僅在選擇標籤角度獲取字符串值?
- 9. 如何獲取字符串數組的字符串長度?
- 10. 如何獲取包含在指定字符串中的特定字符串?
- 11. 如何獲取字符串長度
- 12. 如何確定PostScript字體的高度和深度?
- 13. 在JS中獲取字符串長度
- 14. 在StringWriter中獲取字符串長度?
- 15. 如何在PostgreSQL中獲取輸入字符串的長度
- 16. 如何在PHP中獲取字符串的像素長度?
- 17. 如何在Perl中獲取字符串的長度?
- 18. 如何在Swift iOS8中正確獲取字符串的寬度?
- 19. 如何在PHP中獲取字符串的確切長度?
- 20. 如何在PHP中獲取字符串後的字符串?
- 21. 從字符串中獲取子字符串與給定的指標
- 22. C#:如何獲得字符串中的字符串的長度[]
- 23. 在Inno Setup中獲取字符串的寬度和高度Pascal腳本
- 24. 獲取UTF8中字符串的長度
- 25. 獲取C++中字符串的長度
- 26. 如何從字符串中提取指定的字符串
- 27. 如何獲取nodejs中字節的字符串長度?
- 28. 在字符串中的指定位置獲取字符
- 29. 在字符串中獲取字符串
- 30. 如何在JSON中獲取字符串?
如果矩陣中存在任何Y切變,這也不起作用。如果`/ FontMatrix get 5 get`不爲零,那麼字形的高度將取決於其寬度。 – 2011-09-15 20:56:47
工作更多的字體類型,你需要使用FontBBox以及:http://stackoverflow.com/questions/8296322/how-to-determine-height-and-depth-of-a-postscript-font/19263342#19263342 – 2013-10-09 04:49:32