gpt4 book ai didi

postscript - 如何确定 PostScript 中的字符串高度?

转载 作者:行者123 更新时间:2023-12-04 00:40:35 30 4
gpt4 key购买 nike

我需要在 postscript 中确定字符串的高度(以给定的比例和字体)。

/Helvetic-Oblique findfont
10 scalefont
setfont
10 10 1 0 360 arc fill
10 10 moveto (test) dup stringwidth pop 2 div neg 0 rmoveto show

将在 (10,10) 水平(但尚未垂直)打印测试。 (为了看到这一点,我还在 10,10 处显示了一个小圆圈)。我还需要确定字符串高度以垂直居中文本,但我找不到它的函数。

最佳答案

您熟悉您使用的 PostScript 代码吗?还是只是从某个地方盲目复制粘贴?如果你想理解它,你应该谷歌搜索“PostScript Language Reference”或“Red Book”或“PLRM”。这些资源可从 Adob​​e 以 PDF 格式获得。

您的 PostScript 代码段使用以下步骤:

  • (test)将字符串“test”放在栈顶。
  • dup复制堆栈中最顶层的项目。 (您现在将在堆栈中获得两次字符串。)
  • stringwidth .执行此操作符后,最上面的“测试”字符串将被消耗,两个值将被添加到堆栈中:字符串的高度(最上面)和字符串的宽度(从顶部倒数第二个)。 [ 更新:实际上,“字符串的高度”并不完全正确——而是绘制字符串后当前点的垂直偏移量...]
  • 接下来,您使用 pop .这只是删除堆栈中最顶端的值。现在只有字符串的宽度保留在堆栈的顶部。
  • 2 div将该值除以 2 并留下结果(字符串宽度的一半)。
  • neg否定堆栈中的最顶部值。现在该负值位于堆栈的最顶部。
  • 0将值“0”放在堆栈顶部。
  • rmoveto然后消耗堆栈上的两个最上面的值,并将当前点向左移动该距离(字符串宽度的一半)。
  • 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 , rollsub红皮书中的运算符。

    此命令使用 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"

    关于postscript - 如何确定 PostScript 中的字符串高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3618194/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com