将postscript文件的子集转换为pdf文档

时间:2012-07-17 14:23:51

标签: pdf ghostscript postscript

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

例如,一个postscript文件包含200封给客户的信件,每封信件长10页。此postscript文件包含2000页。我想从这个1 ps文档,200x 10页PDF输出,每个客户一个。

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

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

非常感谢,

3 个答案:

答案 0 :(得分:2)

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

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

买者;我还没有尝试过任何一个,它需要一些PostScript编程才能使它工作。

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

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

答案 1 :(得分:1)

好吧,你可能首先将PS变成PDF对象集合(或者通过打印到PDFWriter设备直接从GhostScript生成PDF),然后" cut"来自使用pdftk的大PDF,这将非常快。

答案 2 :(得分:0)

首先在Ghostscript的帮助下创建完整的PDF文件:

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

使用pdftk提取PDF文件,每页10页:

 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

您可以首先使用以下内容创建名为“2000p.ps”的示例PostScript文件,让Ghostscript为您生成2000页示例+测试PDF:

 %!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

然后运行此命令:

 gs -o 2000p.pdf -sDEVICE=pdfwrite -g5950x8420 2000p.ps