2012-04-04 47 views
7

寬度我使用GS做從PDF到JPEG的轉換和下面是我使用命令:設置自動高度/用於轉換中的JPEG PDF使用GhostScript的

gs -sDEVICE=jpeg -dNOPAUSE -dBATCH -g500x300 -dPDFFitPage -sOutputFile=image.jpg image.pdf 

在這個命令可以看出U -g500x300是設置轉換後的圖像大小(寬x高)。

有沒有辦法設置寬度而不必輸入高度,因此它將基於寬度來使用其原始高寬比來縮放高度?我知道這可以通過使用ImageMagick轉換器來實現,只需將0放在高度參數上即-resize 500x0。我嘗試了GhostScript,但我不認爲這是做到這一點的正確方法。

我決定不使用ImageMagick轉換原因,因爲它轉換大尺寸多頁PDF時速度很慢。

感謝您的幫助!

回答

5

這篇文章解釋了爲什麼ghostscript更快 - https://serverfault.com/questions/167573/fast-pdf-to-jpg-conversion-on-linux-wanted,解決它的唯一解決方法將涉及修改imagemagick代碼。

不幸的是,自定義輸出大小不受ghostscript支持。這主要是因爲所使用的-g選項實際上是確定將保存渲染輸出的大小,而不是渲染的輸出本身。由於-dPDFFitPage開關會導致輸出尺寸發生變化,該開關會嘗試匹配設備尺寸。雖然您可以使用-dDEVICEHEIGHT=n來定義jpeg'設備'的高度,但這會使設備寬度保持不變。

雖然有些單調乏味的解決方法,但您可以使用ghostscript或imagemagick來獲取PDF頁面的寬度和高度。要使用ghostscript來做到這一點,請參閱Using GhostScript to get page size的答案。然後,您可以計算適當的寬度以設置-g標誌以保持寬高比。紅利點,如果你可以找出一組命令來完成所有這些:)

4

你可以寫一個PostScript程序來做到這一點。這裏是一個開始:

 
%! 
% usage: gs -sFile=____.pdf scale.ps 

/File where not { 
    (\n *** Missing source file. \(use -sFile=____.pdf\)\n) = 
    Usage 
} { 
    pop 
}ifelse 

% Get the width and height of a PDF page 
% 
/GetSize { 
    pdfgetpage currentpagedevice 
    1 index get_any_box 
    exch pop dup 2 get exch 3 get 
    /PDFHeight exch def 
    /PDFWidth exch def 
} def 


% 
% The main loop 
% For every page in the original PDF file 
% 
1 1 PDFPageCount 
{ 
    /PDFPage exch def 
    PDFPage GetSize 

% In here, knowing the desired destination size 
% calculate a scale factor for the PDF to fit 
% either the width or height, or whatever 
% The width and height are stored in PDFWidht and PDFHeight 
    PDFPage pdfgetpage 
    pdfshowpage 
} for 

pdfgetpage和pdfshowpage是內部Ghostscript的擴展PostScript語言處理PDF文件。

+0

你能詳細解釋一下如何使用這個程序嗎? 我也需要製作一個shell腳本並運行它? – 2016-03-14 06:18:02

+0

它的PostScript,所以你把它提供給PostScript解釋器。準確地說,您將它作爲輸入文件命令行參數傳遞給Ghostscript。作爲該計劃的第一行的評論甚至給你提供了用法。請注意,這不是一個完整的工作實現。 – KenS 2016-03-14 08:03:15

相關問題