如何在postscript文件上创建程序覆盖文本?

时间:2010-09-11 04:49:54

标签: pdf graphics shell postscript ghostscript

我有一些postcript格式的图表,由gnuplot生成。我需要在图表上放置一些识别信息。如何编写一些指令来执行此操作?我想在图表的右上角写一个数字(.ps文件)。

3 个答案:

答案 0 :(得分:5)

好的,您链接到的示例文件表现良好(并且没有重新定义showpage运算符)。

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

  1. 您的所有.ps文件都与您的示例文件类似。
  2. 所有.ps文件仅为1页(如.eps文件)。
  3. 您的所有文件名都像gnp-NNN.ps一样构建(如 gnp-544.ps )。
  4. 您要在右上角显示的数字是文件名中的NNN
  5. 我还假设你安装了Ghostscript,它是most recent version,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或您可以使用和喜欢的任何内容。
    • 或修改fontsize:15这里表示15分(PDF 72分== 1英寸)。
    • 或更改位置:453 482将PostScript当前点移动到“453指向左侧,482指向顶部”(使用oringin 0,0 设置在左下角。)
    • 或调整媒体大小:-g5030x5320为您提供503x532分(由于-sDEVICE=pdfwrite使用的默认分辨率为720 dpi。
    • 或者将要打印的字符串设置为(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
    

    批量转换大量文件

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

    1. 您的NNN编号方案未使用前导0
    2. 您要转换的文件范围是gnp-1.ps..gnp-1000.ps。
    3. 您想要添加数字的PDF输出,而不是PS。
    4. 在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)的屏幕截图:
      alt text

答案 1 :(得分:3)

如果您无权访问Gnuplot源文件,则这是一个有效的通用方法(您可以编写脚本)。它使用 Ghostscript PDFTK

  1. 创建一个新的PDF文件,其中包含要叠加到.ps图表的内容。
  2. 使用Ghostscript将源自Gnuplot的.ps图转换为PDF。
  3. 使用pdftk(在Unix上)或pdftk.exe(在Windows上)覆盖两个PDF。
  4. 使用Ghostscript将PDF转换回PS(如果需要),或者继续使用PDF。
  5. This SuperUser answer包含许多详细信息,可以帮助您完成上述路径。


    借助文本编辑器,您可以插入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代码片段是否真的有效。

答案 2 :(得分:1)

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

相关问题