2016-05-13 93 views
1

我有一個ImageMagick命令用於將PDF的第一頁轉換爲圖像。轉換ImageMagic轉換腳本爲Ghostscript腳本

convert file.pdf[0] -background white -flatten -resize 173 \ 
    -crop 173X229+0+0 -gravity NorthWest +repage test.jpg 

這裏我需要173px寬度的圖像,第一頁的最大高度爲229px。 對於較大的文件(〜9MBs),轉換大約需要2分鐘。

當我試圖使用以下GS對其進行測試,劇本只花了幾秒鐘的分數:

gs -sDEVICE=jpeg -dFirstPage=1 -dLastPage=1 -o test4.jpg file.pdf 

我需要幫助影像縮放到173px,然後裁剪高度229px。任何人都可以用這個gs腳本來幫忙嗎?

+0

閱讀Ghostscript文檔:-)您將需要-dFIXEDMEDIA開關以及-gXandY來設置所需的頁面大小(以像素爲單位),然後您將最終需要-dPDFFitPage將頁面縮放到這些尺寸。 – KenS

+0

謝謝@KenS。我可以通過使用上面的提示來得到它的一些工作 - 'gs -sDEVICE = jpeg -dFirstPage = 1 -dLastPage = 1 -g173x229 -dFIXEDMEDIA -dPDFFitPage -o test6.jpg file.pdf' 然而,還有一個問題 - 當我使用橫向導向的pdf時,我得到一個旋轉的圖像。即圖像作爲potrait旋轉。我似乎找不到任何有用的東西。你能幫我嗎? 我嘗試添加params -c「<> setpagedevice」,但是這會引發錯誤 – iamkhush

+0

如果旋轉時它更合適,FitPage例程將旋轉它,因爲它涉及更少的縮放。如果你想避免這種情況,你需要重寫那段代碼。它們是用PostScript編寫的,你如何在PostScript中編碼?在媒體匹配中更改方向將無濟於事,因爲您已使用-g – KenS

回答

1

在2086行附近的/ghostpdl/Resource/Init/pdf_main.ps是執行縮放的例程pdf_PDF2PS_matrix。在各地的線2094,我們看到:

currentpagedevice /.HWMargins get aload pop 
currentpagedevice /PageSize get aload pop 
% Adjust PageSize and .HWMargins for the page portrait/landscape orientation 
2 copy gt % PageSize_is_landscape 
7 index aload pop 3 -1 roll sub 3 1 roll exch sub exch 
10 index /Rotate pget not { 0 } if cvi 90 idiv 1 and 0 ne { exch } if 
gt % Box_is_landscape 
ne { 
    1 index 0 translate 90 rotate % add in a rotation 

這將檢查已設置對從PDF文件中請求媒體的定向媒體的方向,如果他們是不一樣的,它旋轉的PDF文件90度。

您可以將其更改爲:

currentpagedevice /.HWMargins get aload pop 
currentpagedevice /PageSize get aload pop 
% Adjust PageSize and .HWMargins for the page portrait/landscape orientation 
2 copy gt % PageSize_is_landscape 
7 index aload pop 3 -1 roll sub 3 1 roll exch sub exch 
10 index /Rotate pget not { 0 } if cvi 90 idiv 1 and 0 ne { exch } if 
gt % Box_is_landscape 
ne pop false { 
    1 index 0 translate 90 rotate % add in a rotation 

,這將防止if子句從執行(從堆棧pop'ping布爾和一個「假」替換它),這樣的旋轉不會採取地點。

對我來說,這不會旋轉你的風景頁面。

你如何使用它取決於你的Ghostscript是如何構建的,這可能取決於Linux發行版的包維護者。

如果將資源內置到ROM文件系統中,則需要找到存儲在磁盤上的副本,修改該文件,然後重新構建Ghostscript,以便將修改後的文件內置到ROM文件系統中,或者使用-I開關告訴Ghostscript忽略ROM文件系統並從磁盤上讀取資源。

如果Ghostscript不是爲了使用ROM文件系統而構建的,那麼您需要在磁盤上找到資源並修改該文件。或者你也可以使用-I開關告訴Ghostscript使用一組修改過的資源。

無論如何,使用-I開關總體上可能是最好的,因爲這樣您可以保留正常的資源,並且只在您想要執行此任務時使用此修改後的代碼。

+0

謝謝。工作絕對好。我發現橫向和縱向風格的圖片都留下了很多空白。我們可以做些什麼呢? – iamkhush

+0

你可以做各種各樣的事情。我記得原始文檔中有空白區域,但它使用CropBox在沒有它的情況下顯示Acrobat。請首先使文檔沒有空白,或者設置-dUseCropbox。如果您將它們渲染到固定的縱向介質中,橫向頁面總是*將具有空白區域。 – KenS