2010-09-02 48 views
13

我的團隊一直在使用itext-sharp庫和C#/ .NET來生成自定義的動態PDF。大部分情況下,這個過程對我們的需求非常有效。我們在開發/測試過程中遇到的一個問題是佈局問題,這可能導致PDF無法在Adobe Reader中正確打開/呈現,新版本的Acrobat/Reader。如何找到程序生成PDF的問題?

該文檔將爲第一個X頁面正確打開顯示。但如果出現錯誤,文檔中的其餘頁面將不會顯示。

如前所述,我們通常能夠使用我們的C#/ iText代碼將這個問題追蹤到佈局類型問題。我們最終通過使用猜測和檢查方法或者分而治之來找到錯誤。它可以工作,但它並不是解決這些問題的最佳方法。

我想知道是否有任何工具可以加速驗證PDF文檔的過程,並有助於指出文檔中的錯誤?

回答

13

驗證PDF文件可能是一項相當棘手的任務 - 主要是因爲正確執行此操作所需的工具非常昂貴。

Acrobat有一個工具(高級>預檢> PDF分析>報告PDF語法問題),可以掃描PDF以查找任何語法問題,但無法以編程方式訪問該工具。

Appligent有一個名爲pdfHarmmony的工具,它由Adobe的PDF庫提供支持,並且可以通過編程方式訪問,但它非常昂貴(US $ 2500 +)。如果你能負擔得起,這個選項會給你最好的結果。

還有另一種選擇是3-Heights PDF Analysis & Repair,我不知道它的質量是什麼樣,但它同樣很昂貴。

SourceForge上的PDF Validator tool可能會讓你感興趣,但它只分析文檔結構而不是內容本身,因此不會拾取損壞的圖像或內容流。

不幸的是,由於難以詳細分析PDF文件,實際上沒有任何可以正確執行的免費工具,但我認爲檢查文檔結構的工具總比沒有好。

17

「最便宜」(同時相當可靠!)的方式是使用Ghostscript。讓Ghostscript解釋PDF並查看它給出的返回值。如果沒有問題,PDF文件應該沒問題。在Windows上:

gswin32c.exe^
     -o nul 
     -sDEVICE=nullpage^
     d:/path/to/file.pdf 

輸出設備nullpage不會創建任何新文件。但是Ghostscript會告訴stdout/stderr它是否遇到錯誤。檢查%errorlevel%僞環境變量的內容。 - 在Linux上:

gs \ 
     -o /dev/null \ 
     -sDEVICE=nullpage \ 
     /path/to/file.pdf 

(請與echo $?爲「沒有問題」一0值返回值)

在錯誤的情況下,Ghostscript的問題的一些信息可能對您有所幫助。無論如何,至少你可以肯定地確定那些確實有問題的文件:如果Ghostscript可以處理它們,Acrobat(Reader)也不會有任何問題。

+0

非常有幫助,謝謝!但請注意:在ghostscript v9上。18在達爾文(OS X)上,這個命令在解析失敗時仍然會退出'0',但僅限於某些PDF,所以我現在依靠退出代碼和標準錯誤輸出來判斷它是否解析失敗。 – piersadrian 2016-02-29 23:41:45