1

我有一个系统可以生成大量 PostScript 文件,每个文件都包含多个多页文档。我想编写一个脚本来获取这些大型 PostScript 文档并从每个文档中输出多个 PDF 文档。

例如,一个附言文件包含 200 封给客户的信,每封有 10 页长。这个后记文件包含 2000 页。我想从这个 1 ps 文档中输出 200x 10 页 PDF,每个客户一份。

我在想 GhostScript 是这种级别的文档操作的方法,但我不确定最好的方法 - GhostScript 中是否有一个函数来获取输入 ps 文件的“第 1-10 页”?我是否必须将整个 ps 文件输出为 2000 个单独的 ps 文件(每页 1 个),然后将它们重新组合在一起?

或者有没有一种更简单的方法可以用 GhostScript 以外的东西来实现我的目标?

非常感谢,

4

3 回答 3

2

从技术上讲,这将在 Ghostscript 的下一个版本中实现,或者使用 Git 存储库中的 HEAD 代码。现在可以在使用 pdfwrite 时切换设备,这将导致设备关闭并完成当前的 PDF 文件。再次切换回来将开始一个新的。

将此与页面设备字典中的 BeginPage 和/或 EndPage 过程相结合,您应该能够执行您想要的操作。

警告; 我还没有尝试过这些,它需要一些 PostScript 编程才能让它工作。

由于 PostScript 的性质,无法从文件中提取第“N”页,因此无法指定页面范围。

正如 lsemi 建议的那样,您可以先转换为一个大的 PDF 文件,然后提取所需的范围。Ghostscript 能够使用 FirstPage 和 LastPage 开关来执行此操作(与 PostScript 不同,它可以从 PDF 文件中提取特定页面)。

于 2012-07-17T14:32:30.927 回答
1

好吧,您可以先将 PS 制作成 PDF 对象集合(或通过打印到 PDFWriter 设备直接从 GhostScript 生成 PDF),然后使用 pdftk 从大 PDF 中“剪切”,这会非常快。

于 2012-07-17T14:26:02.850 回答
0

Create the complete PDF file first with the help of Ghostscript:

 gs \
   -o 2000p.pdf \
   -sDEVICE=pdfwrite \
   -dPDFSETTINGS=/prepress \
    2000p.ps

Use pdftk to extract PDF files with 10 pages each:

 for i in $(seq 0 10 199); do \
     export start=$(( ${i} * 1 + 1 )); \
     export end=$(( ${start} + 9 ));  \
     pdftk \
        2000p.pdf \
        cat ${start}-${end} \
        output pages---${start}..${end}.pdf; \
 done

You can have Ghostscript generate a 2000page sample+test PDF for you by first creating a sample PostScript file named '2000p.ps' with these contents:

 %!PS
 /H1 {/Helvetica findfont 48 scalefont setfont .2 .2 1 setrgbcolor} def
 /pageframe  {1 0 0 setrgbcolor 2 setlinewidth 10 10 575 822 rectstroke} def
 /gopageno {H1 300 700 moveto } def
 1 1 2000 {pageframe gopageno
    4 string cvs
    dup stringwidth pop
    -1 mul 0 rmoveto
    show
    showpage} for

and then run this command:

 gs -o 2000p.pdf -sDEVICE=pdfwrite -g5950x8420 2000p.ps
于 2012-07-18T10:27:08.040 回答