2012-07-17 50 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