일부 텍스트 바로 아래에 수평선을 배치하고 싶습니다. Ghostscript에서 주어진 글꼴의 기준선과 가장 낮은 디센더 사이의 거리를 결정하는 것이 가능합니까? 아니면 디센더 길이는 특정 문자의 속성일 뿐이며 오프셋은 눈으로만 찾을 수 있습니까?
아래 예에서 moveto 명령은 그래픽의 위쪽 가장자리에서 20포인트의 텍스트를 이동하고 20포인트 수직선(비교를 위해 포함됨)이 글꼴의 기준선에 해당하는 것으로 나타납니다.
gs -q -o test.pdf -sDEVICE=pdfwrite -dDEVICEWIDTHPOINTS=200 -dDEVICEHEIGHTPOINTS=100 -c "newpath 27 80 moveto 27 100 lineto 0.5 setlinewidth 스트로크 /Helvetica findfont 20 scalefont setfont 3 80 moveto (gijlpqy) 디스플레이 페이지 표시"
답변1
주어진 문자열의 하강 부분 아래에 선을 그리려면 pathbbox
질문 주석에 Ridgy가 제공한 링크를 사용할 수 있지만 기준선과 일정한 거리를 유지하려면 글꼴 경계 FontBBox
상자를 사용해야 합니다. 이는 글꼴 직사각형의 모든 문자를 둘러싸는 것입니다.
글꼴 크기에 따라 크기를 조정해야 합니다 FontMatrix
. 이 작업을 수행하는 코드는 여기에서 찾을 수 있습니다.스택 오버플로jcomeau_ictx의 답변이 아래에 복사되었습니다. PostScript 코드 시작 부분에 다음 정의를 추가하세요.
/descender { currentfont dup /FontBBox get % [llx lly urx ury]
1 get % lower-left-y
exch /FontMatrix get % [...]
3 get % yscale
mul } def
연산자 뒤에 사용하세요 show
. 기준선에서 글꼴 경계 상자의 아래쪽 가장자리까지의 y 거리를 스택에 넣습니다. 여기에 선 그리기 코드를 추가하면 됩니다. 예를 들면 다음과 같습니다.
descender 0 exch rmoveto -100 0 rlineto stroke