2012-07-17 75 views
1

我有一个系统可以生成大量的PostScript文件,每个文件都包含多个多页文档。我想编写一个脚本,它接受这些大型PostScript文档并从每个文档输出多个PDF文档。将postscript文件的子集转换为pdf文档

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

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

还是有更简单的方法来达到我的目标与GhostScript以外的东西?

非常感谢,

回答

1

嗯,你可能首先使PS成PDF对象集合(或通过打印到PDFWriter设备直接生成GhostScript的PDF文件),然后从“一刀切”大PDF使用pdftk,这将是相当快。

+0

谢谢我会给出这个结论。 – Bappy1988 2012-07-17 14:40:03

2

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

将此与页面设备字典中的BeginPage和/或EndPage过程结合使用,并且您应该可以按照自己的需要进行操作。

警告;我还没有尝试过这一点,并且需要一些PostScript编程来实现它。

由于PostScript的本质,没有办法从文件中提取'第N个页面,因此无法指定一系列页面。

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

+0

感谢您的支持。不幸的是,我不拥有创建postscript的软件包,我只是在文件结尾处获得该文件并且必须使用它。 – Bappy1988 2012-07-17 14:39:45

0

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

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

使用PDFTK提取每10页PDF文件:

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 

你可以有Ghostscript的产生2000page样品+通过首先创建一个名为'2000p.ps'的示例PostScript文件来为您测试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