Ghostscript/Postscript에서 글꼴 디센더의 크기를 포인트 단위로 찾으시겠습니까?

Ghostscript/Postscript에서 글꼴 디센더의 크기를 포인트 단위로 찾으시겠습니까?

일부 텍스트 바로 아래에 수평선을 배치하고 싶습니다. 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

관련 정보