2011-01-28 165 views
16

我使用Ghostscript庫API(從C#打包)從我的應用程序打印PDF文檔。
通過'-dFirstPage'和'-dLastPage'參數,我可以選擇一系列要打印的頁面,但PDF頁面的總數量如何?Ghostscript:PDF總頁數

當允許用戶選擇頁面間隔從2到10時,讓我說,PDF文檔只有4頁是不是很好。

請考慮我正在通過gsapi_init_with_args API庫調用使用Ghostscript庫。

+1

PDF必須在其元數據目錄中聲明其頁數。你可以運行s.th.像* gs -q -c「(in.pdf)(r)文件runpdfbegin pdfpagecount = quit」*使Ghostscript對頁面進行計數。 – 2011-01-28 10:13:19

+0

@皮皮塔斯你好,謝謝你的幫助;如果我支持,我必須使用「(in.pdf)(r)文件runpdfbegin pdfpagecount = quit」作爲GS調用的輸入參數嗎?如果是,'in.pdf'將是輸入文件,但'(r)'是什麼?再次感謝。 – lorenzoff 2011-01-28 10:39:34

+0

只需使用'(r)'即可。這是一個Ghostscript內部宏,告訴Ghostscript讀/運行'(in.pdf)'文件...是的,唯一的變量是'in.pdf` - 用它的[path +]文件名取代它。 – 2011-01-28 14:23:22

回答

31

Ghostscript可以計數並顯示stdout上PDF的頁數。該命令行是

gswin32c^
    -q^
    -dNODISPLAY^
    -c "(input.pdf) (r) file runpdfbegin pdfpagecount = quit" 

這裏所有的東西-c "..."是PostScript命令行片斷(使用一些GS內部命令擴展)。和input.pdf是PDF文件名(也可以是像(c:/path/to/my.pdf)這樣的完整路徑)。

但是,更好更快的工具這個類型的工作將使用pdfinfo(XPDF實用程序的一部分,也可在Windows上獲得)。


更新:

@ebyrob想知道如果一個人可以修改我的示例命令行,以便它也顯示在單次操作的PDF。試試這個:

gswin32c^
    -q^
    -c "(input.pdf) (r) file runpdfbegin pdfpagecount ="^
    -f input.pdf 

那麼,它不是一個單一的操作 - 這是在一個單一的命令行只有兩個不同的操作。

0

我試圖讓這個腳本:

C#
gswin32c^
    -q^
    -c "(input.pdf) (r) file runpdfbegin pdfpagecount ="^
    -f input.pdf 

工作包裹解決方案,並不斷收到錯誤 「/ undefinedfilename」。在這種情況下,請確保您的文件路徑具有斜槓「/」作爲DirectorySeperator而不是反斜槓「\」。我知道庫爾特普菲弗已經寫了它,但它發生在我身上,我只是忽略了它。