如何在PostScript文件上叠加文本?

3

我有一些由gnuplot生成的postscript格式的图表。我需要在图表上放置一些标识信息。如何编写脚本以执行此操作?我想在图表的右上角写入一个数字(.ps文件)。


你能提供一份你的.ps图表样本链接吗?(我有代码,但它不能与所有类型的PS一起使用。) - Kurt Pfeifle
3个回答

5

好的,你提供的示例文件表现良好(并且没有重新定义showpage运算符)。

所以现在我假设以下内容:

  1. 您所有的.ps文件都类似于您的示例文件。
  2. 您所有的.ps文件仅为1页(类似于.eps文件)。
  3. 所有文件名都像gnp-NNN.ps构造一样(就像gnp-544.ps一样)。
  4. 您想要出现在右上角的数字是来自文件名的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/TimesHelvetica-Bold或其他字体。
  • 或调整字体大小:15表示15个点(在PDF中,72点== 1英寸)。
  • 或更改位置:453 482将PostScript当前点移动到"左侧453个点,顶部482个点"(原点0,0设置为左下角)。
  • 或调整媒体大小:-g5030x5320给出503x532个点(由于-sDEVICE=pdfwrite使用的默认分辨率为720 dpi)。
  • 或将要打印的字符串设置为(文件号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

批量转换大量文件

现在,如何进行批量转换?对于这最后一步,我假设:

  1. 您的 NNN 编号方案没有使用前导的 0
  2. 您要转换的文件范围是 gnp-1.ps..gnp-1000.ps。
  3. 您希望输出 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

现在在命令行中运行以下命令:
for i in $(seq 1 1000); do addnumbers-make-pdf.sh ${i} ; done

更新:
哈哈!它甚至可以工作;-) 我刚在Windows上测试了它。这是一个屏幕截图,显示原始文件和叠加文件(作为PDF文件):
alt text


我想在一个有X页的PDF文件中添加页脚。请使用Ghostscript叠加文本。我尝试使用LibreOffice将PDF转换为使用MS Word 2007 XML的DOC,但得到了空文档。任何帮助都将是极好的。 - Steeve

3
如果您无法访问Gnuplot源文件,这里提供一种通用方法(可编写脚本),使用Ghostscript和PDFTK。
  1. 创建一个包含要叠加到.ps图形上的内容的新PDF文件。
  2. 使用Ghostscript将Gnuplot衍生的.ps图形转换为PDF。
  3. 使用Unix上的pdftk或Windows上的pdftk.exe重叠两个PDF。
  4. 使用Ghostscript将PDF转换回PS(如果需要),或者继续使用PDF。

SuperUser答案包含许多详细信息,可以帮助您完成上述路径。


借助文本编辑器,您可以手动将PostScript代码插入到.ps文件中,以呈现附加信息。

但是,在查看图表的PS代码之前,我无法为您提供可工作的PS代码片段。


Ghostscript可以让您使用单个命令行从图形中创建新的PS文件。尝试类似于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代码片段是否真正有效。

我浏览了那些SuperUser上的答案,但正在寻找更直接的方法,你说如果有访问图形ps源代码的权限,这是可以实现的。抱歉耽搁了,所以这里是链接:http://terminal9.org/.files/gnp-544.ps - rup

1
如果您可以影响gnuplot代码,您可以使用gnuplot添加文本。请参见this以获取示例。要使用的命令是set label

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接