我有一个系统可以生成大量的PostScript文件,每个文件都包含多个多页文档。我想编写一个脚本来获取这些大型PostScript文档并从每个文档输出多个PDF文档。
例如,一个postscript文件包含200封给客户的信件,每封信件长10页。此postscript文件包含2000页。我想从这个1 ps文档,200x 10页PDF输出,每个客户一个。
我认为GhostScript是采用这种级别的文档操作的方法但是我不确定最好的方法 - GhostScript中是否有一个函数来获取输入ps文件的“1-10页” ?我是否必须将整个ps文件输出为2000个单独的ps文件(每页1个)然后再将它们组合在一起?
或者有更简单的方法用GhostScript以外的东西来实现我的目标吗?
非常感谢,
本
答案 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