Możesz uzyskać szerokość łańcucha w bieżącej czcionce za pomocą stringwidth
i chociaż to faktycznie przesuwa współrzędne przesunięcia na stosie, wartość y zawsze wydaje się być bezużyteczna. Czy istnieje sposób na określenie dokładnej wysokości struny, która może, ale nie musi zawierać spękań?Jak uzyskać metrykę wysokości napisu w PostScript?
Odpowiedz
stringwidth
, jak to się mówi, nie zwraca wysokości napisu. (We wszystkich przypadkach, na które patrzyłem, druga liczba całkowita na stosie po wykonaniu stringwidth
była 0
- dla łańcuchów, które biegną w kierunku poziomym.) stringwidth
podaje względne współrzędne bieżącego punktu po wykonaniu (string) show
.
PLRM ma to znaczy o stringwidth
:
Należy zauważyć, że szerokość zwrócony przez stringwidth definiuje się jako ruch obecnego punkcie. Nie ma to nic wspólnego z wymiarami konturów glifów.
Co więc należy zrobić, aby wziąć pod uwagę wysokość sznurka? Magiczne słowa, o których można przeczytać w PRLM to: charpath
i pathbbox
. Spróbuj tego:
%!
/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
Oblicza (wydrukowanego na czerwono) wysokość napisu i wykorzystuje te informacje, aby spróbować i centrum małego wypełniony okrąg (drukowany w czerni) do centrum jego obwiedni:
To wydaje się działać większość czasu:
/fontheight { currentfont /FontMatrix get 3 get } bind def
/lineheight { fontheight 1.2 mul } bind def
To nie będzie działać dla wszystkich /FontType
s.
Odpowiedziałem już na to w How to determine string height in PostScript?, ale jest to przydatne również tutaj.
Wystarczy dodanie do pipitas odpowiedź:
/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
Sposób spodziewa się, że niektóre czcionki jest już ustawiony. Działa na wybranej czcionce (setfont
) i jej rozmiarze (scalefont
).
Używam (HÍpg), aby uzyskać największe pole graniczne możliwe, używając podkreślonych wielkich liter i znaków "poniżej linii". Wynik jest wystarczająco dobry.
Alternatywne podejście kradnie odpowiedź od dreamlax - niektóre czcionki nie obsługują operatora charpath
.
Zapisywanie i przywracanie kontekstu graficznego utrzymuje bieżący punkt w miejscu, więc nie ma wpływu na "przepływ" dokumentu.
Mam nadzieję, że pomogłem.
Dodatkowo można użyć 'currentfont/FontBBox get' dla ramki ograniczającej, zamiast używać' charpath pathbbox', aby ją pobrać ... w moim przypadku działało idealnie pod GhostScript; jednak wynik nie był dobry, gdy został zinterpretowany przez drukarkę. –
- 1. Jak określić wysokość napisu w PostScript?
- 2. Jak uzyskać długość napisu?
- 3. Pobierz metrykę czcionki w pikselach
- 4. Open source interpreter PostScript
- 5. Jak zastąpić podciąg napisu
- 6. Jak usunąć część napisu?
- 7. Postscript: jak przekonwertować liczbę całkowitą na ciąg?
- 8. Jak dodać numery stron do Postscript/PDF
- 9. Jak określić metrykę odległości dla kmeans w R?
- 10. Jak uzyskać rzeczywistą wysokość napisów w Javie?
- 11. Pisanie podstawowego skryptu PostScript ręcznie
- 12. Jak sformatować LocalDate do napisu?
- 13. Jak wywołać metodę według napisu w Pythonie?
- 14. Jak wykryć szerokość napisu Unicode w terminalu?
- 15. Jak używać qsort do napisu w C++
- 16. Zdjąć część napisu w JavaScript
- 17. int do napisu w mysql
- 18. Jak uzyskać wektor kamery z rolki, wysokości i odchylenia?
- 19. Użyj Ghostscript do konwersji PCL na PostScript
- 20. Dołącz cudzysłowy wewnątrz napisu?
- 21. PostScript kontra PDF jako format wyjściowy
- 22. Jak wydrukować tylko niektóre części napisu?
- 23. Boost spirit może obsłużyć Postscript/PDF jak języki?
- 24. Sortowanie liter jednego napisu tekstowego w Pythonie?
- 25. Jak uzyskać ciąg szerokość
- 26. Animowanie dodanie napisu do ListBox w FireMonkey
- 27. javascript: xml do napisu w IE 10
- 28. Usunąć długi myślnik z napisu w JavaScript?
- 29. Drukowanie w języku Java bezpośrednio na drukarce sieciowej Postscript
- 30. Jakie jest zero dla napisu?
To również nie zadziała, jeśli w matrycy występuje jakiekolwiek przecięcie Y. Jeśli '/ FontMatrix get 5 get' nie jest zero, to wysokość glifu będzie zależeć od jego szerokości. –
do pracy na więcej typów czcionek, musisz również użyć FontBBox: http://stackoverflow.com/questions/8296322/how-to-determine-height-and-depth-of-a-postscript-font/19263342#19263342 –