2011-11-17 89 views
4

我有一個PDF文件,我想優化。我從外部接收文件,所以我沒有辦法從一開始就重新創建它。PDF優化Acrobat與Ghostscript

當我在Acrobat中打開文件和查詢的資源,它說,該文件中的字體佔用空間的90%以上。如果我將該文件另存爲postscript,然後將postscript文件保存爲優化的PDF文件,則該文件會顯着縮小(小於80%),並且字體仍將嵌入。

我想用ghostscript重新創建這些結果。我用pswrite和pdfwrite嘗試了各種選項的排列,但是當我執行從PDF到Postscript的初始轉換時,文本被轉換爲圖像。當我轉換回PDF時,字體引用消失了,所以我最終得到一個PDF文件,它具有「圖像」文本而不是實際字體。

該文件包含22個嵌入式自定義Type1字體,我有。我加入的字體到ghostscript的搜索路徑,並證明了ghostscript的可以找到他們:

gs \ 
-I/home/nauc01 
-sFONTPATH=/home/nauc01/fonts/Type1 \ 
-o 3783QP.pdf \ 
-sDEVICE=pdfwrite \ 
-g5950x8420 \ 
-c "200 700 moveto" \ 
-c "/3783QP findfont 60 scalefont setfont" \ 
-c "(TESTING !!!!!!) show showpage" 

生成的文件具有正確嵌入字體。

gs \ 
-sDEVICE=pdfwrite \ 
-sNOPAUSE \ 
-I/home/nauc01 \ 
-dBATCH \ 
-dCompatibilityLevel=1.4 \ 
-dPDFSETTINGS=/printer \ 
-CompressFonts=true \ 
-dSubsetFonts=true \ 
-sOutputFile=output.pdf \ 
    input.pdf 

但輸出通常比輸入更大的任何東西,但我的Ghostscript無法查看文件(Adobe Reader:如果

我也用ghostscript的去從PDF到這樣的PDF嘗試給出「對象標籤嚴重格式化」)。

我不能提供原始文件,因爲它們包含機密信息,但我會盡量回答需要有關他們回答任何問題。

任何想法?提前致謝。

+0

如果Acrobat做你需要的東西,我不明白用ghostscript重新創建它的願望。 Acrobat可以做批量轉換。 –

+0

@luserdroog我需要在* nix環境中運行它。我只有Windows的Acrobat。我相信Acrobat可以用於* nix,但是我希望我不必爲這項工作購買一些東西,因爲這將是一個臨時解決方案。如果一切都失敗了,我可能最終不得不購買它。謝謝回覆。 – user791194

回答

0

你可能想嘗試MultivalentCompress工具。它有一個(實驗性)選項,可以將嵌入的字體進行子集化,這可能會使您的PDF變得更小。它還包含許多允許更好壓縮的開關,有時以質量爲代價(例如,JPEG壓縮位圖)。

不幸的是,最近的多價的版本並不再包含的工具。 Google爲Multivalent20060102.jar,該版本仍包含它們。運行壓縮:

java -classpath /path/to/Multivalent20060102.jar tool.pdf.Compress [options] <pdf file> 
+0

感謝您的回覆。我會研究多價。 – user791194

+0

我下載了您引用的多值jar文件。我可以用-max選項運行它,輸出文件要小得多,但我無法用GS或Acrobat查看它。 -max或-compact選項的文檔說,我需要一個「緊湊感知」查看器,而Adobe讀取器不是。該文檔指出,多價查看器是「緊湊感知」,但當我試圖用它查看文件時,我收到了一堆錯誤。 還有一些其他的命令行選項可供我使用。我會繼續嘗試。 再次感謝您的回覆。 – user791194

+0

「緊湊PDF」格式是(我認爲)多價值作者對PDF標準的非官方修改。除非您不需要PDF在標準PDF閱讀器上可見,否則我會避免使用此選項。 –

2

不要使用pswrite。正如你發現這將呈現文字。而是使用保留字體和文本的ps2write設備。

你不說你正在使用的Ghostscript的版本,但我會建議你使用最新一個。

一點; Ghostscript並不是像Acrobat那樣「優化」PDF,而是重新創建它。原始的PDF被完全解釋爲產生一系列標記頁面的操作,pdfwrite(和ps2write)然後創建一個新文件,其中只有那些內部操作。

如果選擇子集的字體,則僅需要的字型將包括在內。如果原始PDF包含無關信息(例如Adobe Illustrator,通常會嵌入.ai文件的完整副本),則會丟棄該信息。這可能導致一個較小的文件,或者它可能不會。

請注意,pdfwrite目前不支持壓縮外部參照和其他一些其他功能,所以一些文件可能會變得更大。

我親自不是去通過ps2write,因爲這只是增加了另一層程序和信息的丟棄。我只是使用pdfwrite創建一個新的PDF文件。如果您發現無法使用的文件(使用當前代碼),那麼您應該在http://bugs.ghostscript.com處提出錯誤報告,以便有人解決該問題。

+0

感謝您回覆我的問題。我讚賞解釋。 我正在使用9.04。 我只是再次運行它: gs -sDEVICE = pdfwrite -sNOPAUSE -I/home/nauc01 -dBATCH -dCompatibilityLevel = 1.4 -dPDFSETTINGS =/printer -ompressFonts = true -dSubsetFonts = true -sOutputFile = output.pdf輸入。 pdf input.pdf = 6182k opt_printer.pdf = 1720k 輸出文件不會在Adobe Reader中顯示。它給出了「對象標籤格式錯誤」的錯誤,並且所有頁面都是空白的。我可以在gsview中查看它,但字體不正確。 – user791194

+0

我運行了一個我從互聯網上下載的PDF文件。輸出文件比輸入文件大,但文件可以在Adobe Reader中查看。我開始認爲一些自定義的Type1字體已損壞。 我將條目添加到指向.pfb文件的Fontmap.GS文件中。這可能是一個問題嗎? 再次感謝。 – user791194

+0

不,它不應該是一個問題,*除非*原始PDF文件中沒有嵌入字體。就像我說的那樣,文件可能會變得更大,而沒有看到原始文件,我不能進一步評論。我當然可以在這裏創建PDF格式的文件,在Acrobat中工作正常,所以它必須是特定於您的文件的東西。 – KenS