我正在尝试绘制一个矩形并使用 Ghostscript 将其输出到 PDF。 如果我将以下 PostScript 代码放入名为 rect.eps 的文件中,我就会得到我想要的结果:
newpath
100 100 moveto
0 100 rlineto
100 0 rlineto
0 -100 rlineto
-100 0 rlineto
closepath
gsave
0 0 0 setrgbcolor
fill
stroke
showpage
但是如果我尝试将该 PostScript 包含到我的 Ghostscript 命令中,我只会得到一个空白页:
gs -o rect.pdf -sDEVICE=pdfwrite -g300x300 -c "newpath 100 100 moveto 0 100 rlineto 100 0 rlineto 0 -100 rlineto -100 0 rlineto closepath gsave 0 0 0 setrgbcolor fill stroke showpage"
我做错了什么,难道不能用 Ghostscript 绘制一个矩形吗?
致以诚挚的问候 尼古拉斯
最佳答案
Stefan 的评论实际上是正确的。
您已将媒体尺寸设置为 300x300(以像素为单位)。现在假设 pdfwrite 设备的默认分辨率为 720 dpi,并且您没有更改它,这意味着介质尺寸在每个方向上都小于半英寸。
然后,您绘制了一个矩形,盯着页面上的 100,100 个单位,并在每个方向上延伸 100 个单位。 PostScritp 单位为 1/72 英寸,因此矩形的左下角从向上和向右略高于 1 英寸的位置开始。
它位于媒体定义的半英寸见方之外,因此结果只是将矩形从页面上绘制出来。
如果您不设置介质尺寸,Ghostscript 将使用其默认值(A4 或 Letter,具体取决于),您将看到输出。至于为什么当你制作 EPS 文件时它会起作用,我不知道,我希望 EPS 中有你没有共享的内容,这会产生影响。
创建与分辨率无关的 PDF 文件时,最好以与分辨率无关的单位(例如 PostScript 单位)指定介质大小,而不是像素。
请注意,您的代码还有一个额外的问题,Stefan 也提到过,即悬挂的 gsave,它看起来应该在中风之前有一个 grestore。由于中风不会做任何事情,我怀疑你想要:
gsave
0 0 0 setrgbcolor
fill
grestore
stroke
showpage
关于line - 用Ghostscript绘制矩形(使用PostScript语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44934001/