2011-04-17 62 views
3

我想使用ghostscript達到預期的目的,來解釋postscript文件和輸出png。我想要一個命令將一個特定頁面從多頁面ps文件轉換爲單個png。在infile是pdf文件的情況下,我已經完成了這個工作,但當infile是ps時,我沒有完成。如何讓ghostscript將一個特定頁面從postscript文件輸出爲png?

這一行將把ps轉換成一個文件巫婆,它由連接的png文件組成。

gs -dSAFER -dBATCH -sDEVICE=png256 -r96x96 -sOutputFile=out.png in.ps

這將需要從PDF一個特定頁面,並將其轉換成PNG。

gs -q -dSAFER -dBATCH -dFirstPage=2 -dLastPage=2 -sDEVICE=png256 -SOut=fileout.png in.pdf

簡單地把dFirstPage=標誌在後腳本輸入的情況下不執行任何操作。輸出與標誌不存在的情況相同。

回答

4

與PDF不同,並非所有postscript文件都可以按隨機順序訪問其頁面。您可能正在嘗試處理文件。 (否則標記應該在文檔中標記爲「對postscript不起作用」)。

我認爲最簡單的方法是先將PS文件轉換爲PDF,然後從生成的PDF中提取頁面。

由於您在Linux上,因此您可以使用下面使用ghostscript的助手腳本「ps2pdf」(但在大多數發行版中是「ps-tools」或類似命名軟件包的一部分),或者只是指出gs命令線來進行轉換。

另一種方法是將所有頁面生成到所需的最後一個頁面,然後刪除第一個不需要的頁面。

這是由於postscript本身的特性造成的:postscritp文件只是一個計算機程序,它設置了很多內部狀態,呈現頁面並調用showpage函數 - 下一頁然後開始渲染 - 所以,根據文件的不同,外部工具無法知道哪些語句是所有頁面的狀態的一部分,哪些語句僅用於呈現頁面。在較新的規範中,有一些可選的數據結構,繼承自PDF規範,可以用於爲獨立頁面調用正確的代碼,但很少有文件會承載該數據結構。

6

您可以使用PostScript完成此操作,無論該文件是否兼容DSC,前提是您知道所需的頁面。

自定義EndPage程序將完成這項工作。 EndPage爲作業中的每個頁面調用,並且過程必須返回一個布爾值,如果爲true,那麼頁面將傳輸到設備進行打印,如果爲false,則頁面被消耗並丟棄。

<< 
/EndPage { 
    0 eq {  %% reason code is 0 for showpage 
    5 eq {  %% 5 is just an example, you would put your page# minus 1 here 
     true 
    }{ 
     false 
    }ifelse 
    } { 
    pop  %% remove the count of pages from the stack 
    false 
    }ifelse 
} 
>> setpagedevice 

這個測試的原因代碼,以確保其0(SHOWPAGE),則顯示頁面到目前爲止的執行數,看看它我們的目標,如果我們把真正的堆棧和回報。對於任何其他條件,我們把錯誤和返回。

請注意,只有在退出解釋程序時纔會重置頁面計數,因此如果在不重新啓動解釋程序的情況下背靠背運行兩個文件,則這隻適用於第一個。

+0

我想你可能會在內部塊之後缺少if或ifelse運算符。 – Emiswelt 2015-04-27 21:32:46

+0

是的,看起來應該是第一個'假'之後的某個地方。 – KenS 2015-04-28 07:21:39

相關問題