我有一些由 gnuplot 生成的 postscript 格式的图表。我需要在图表上放置一些识别信息。我怎样才能编写一些指令来做到这一点?我想在图表的右上角写一个数字(一个 .ps 文件)。
3 回答
好的,您链接到的示例文件表现良好(并且没有重新定义showpage
运算符)。
所以我现在假设如下:
- 您的所有 .ps 文件都与您的示例文件相似。
- 您所有的 .ps 文件只有 1 页(如 .eps 文件)。
- 您所有的文件名都像构造一样
gnp-NNN.ps
(就像gnp-544.ps一样)。 - 您希望出现在右上角的数字
NNN
来自文件名。
我还假设您安装了 Ghostscript,它是最新版本8.71。我目前在 Windows 上——如果你在 Linux/Unix 上,只需将所有行尾替换gswin32c.exe
为.gs
^
\
测试 PDF 输出
现在先试试这个命令:
gswin32c.exe ^
-o gnp-with-number-544.pdf ^
-sDEVICE=pdfwrite ^
-g5030x5320 ^
-c "/Helvetica-Italic findfont 15 scalefont setfont 453 482 moveto (544) show" ^
-f gnp-544.ps
看看结果是否gnp-with-number-544.pdf
像你想要的那样。
用于将-c "..."
PostScript 片段传递给 Ghostscript 并使其与主 .ps 文件一起处理这些文件,然后该文件必须作为下一个参数,使用-f ...
.
您可以修改参数:
/Helvetica-Italic
将字体名称替换为/Helvetica
、/Courier
、/Times
或Helvetica-Bold
任何您可用和喜欢的内容。- 或者修改字体大小:
15
这里表示 15 磅(在 PDF 中72 磅 == 1 英寸)。 - 或更改位置:
453 482
将 PostScript 当前点移动到“向左 453 点,向顶部 482 点”(将原点0,0设置为左下角)。 - 或调整媒体大小:
-g5030x5320
为您提供 503x532 点(由于-sDEVICE=pdfwrite
. - 或将要打印的字符串设置为
(File No. 544) show
或任何您想要的。
您还可以添加相当多的参数来调整输出文件的质量(分辨率、字体嵌入等),但这些参数现在就可以了。
更改为 PostScript 输出
如果您出于某种原因需要 PostScript 输出而不是 PDF,请像这样更改命令:
gswin32c.exe ^
-o gnp-with-number-544.ps ^
-sDEVICE=ps2write ^
-g5030x5320 ^
-c "/Helvetica-Italic findfont 15 scalefont setfont 453 482 moveto (544) show" ^
-f gnp-544.ps
批量转换大量文件
现在,如何批量转换它?对于这最后一步,我假设:
- 您的
NNN
编号方案未使用前导0
s。 - 您要转换的文件范围是 gnp-1.ps..gnp-1000.ps。
- 您想要添加数字的 PDF 输出,而不是 PS。
在 Windows 上,创建一个addnumbers-make-pdf.bat
包含以下内容的文件:
gswin32c.exe ^
-o gnp-with-number-%1.pdf ^
-sDEVICE=pdfwrite ^
-g5030x5320 ^
-c "/Helvetica-Italic findfont 15 scalefont setfont 453 482 moveto (%1) show" ^
-f gnp-%1.ps
cmd.exe
现在在控制台中运行此命令:
for /l %i in (1,1,100) do (addnumbers-make-pdfvim.bat %i)
在 Linux 上,使用以下内容创建一个addnumbers-make-pdf.sh
Bash shell 脚本:
#!/bin/bash
gs \
-o gnp-with-number-${1}.pdf \
-sDEVICE=pdfwrite \
-g5030x5320 \
-c "/Helvetica-Italic findfont 15 scalefont setfont 453 482 moveto (${1}) show" \
-f gnp-${1}.ps
现在在 shell 中运行这个命令:
for i in $(seq 1 1000); do addnumbers-make-pdf.sh ${i} ; done
更新:
哈!,它甚至可以工作 ;-) 我刚刚在 Windows 上对其进行了测试。这是原始文件和覆盖文件(作为 PDF)的屏幕截图:
如果您无权访问 Gnuplot 源文件,这里有一个有效的通用方法(您可以编写脚本)。它使用Ghostscript和PDFTK。
- 创建一个新的 PDF 文件,其中包含要覆盖到 .ps 图表的内容。
- 使用 Ghostscript 将源自 Gnuplot 的 .ps 图转换为 PDF。
- 使用
pdftk
(在 Unix 上)或pdftk.exe
(在 Windows 上)覆盖两个 PDF。 - 使用 Ghostscript 将 PDF 转换回 PS(如果需要),或者继续使用 PDF。
这个超级用户答案包含许多详细信息,可以帮助您沿着上述路径前进。
在文本编辑器的帮助下,您可以手动插入 PostScript 代码,将附加信息呈现到您的 .ps 文件中。
但是,如果不先查看图形的 PS 代码,我就无法为您提供有效的 PS 代码片段。
Ghostscript您可以使用单个命令行从图形创建新的 PS 文件。
用 s.th 试试。类似于gs -sDEVICE=ps2write -o output-with-comments-gnuplot.ps -c "570 800 moveto /Helvetica findfont 32 scalefont setfont (Number: 42) show" -f /path/to/gnuplot.ps
“。
但是,如果不先查看图形的 PS 代码,我无法真正判断此 PS 代码片段是否真的有效。