2013-08-22 59 views
0

我想從我的VB.Net應用程序打開PDF文件。我收到一個錯誤(彈出窗口),說「文件不以'%PDF-'開始。我想讀取文件的頭部以確定文件是否已損壞。現在,我正在使用Windows.Forms.WebBrowser控件顯示我從數據庫中加載的PDF文件,其中大部分文件加載正常,但有些文件已損壞,因此彈出。使用C#或VB.Net閱讀PDF頭文件

這是我用來加載文件的行:??webBrw.Navigate(Me.currentDocPath)

我怎樣才能在VB.Net這樣做2010

+0

你已經試過的任何代碼? –

回答

1

來自PDF規格。

PDF文件的第一行應是由5個字符%PDF-後跟形式1.N,其中N是0和7

它之間的一個數字的一​​個版本號的報頭聽起來像你的文件實際上不是一個有效的PDF文件。這將是我仔細檢查的第一件事。我曾經從供應商那裏獲得XML文件,這些文件實際上並不是有效的XML文件,所以XML解析器拋出了一個異常 - 讓我吃驚的是,供應商拒絕解決這個問題,因爲放棄是XML解析器應該做的事情,如果文件無效。我最終的解決方案是編寫一個預處理程序,糾正無效的XML,然後調用標準解析器。

我建議嘗試使用PDF驗證工具http://www.pdf-tools.com/pdf/validate-pdfa-online.aspx就是一個例子試試How can I test a PDF document if it is PDF/A compliant?瞭解更多信息,Adobe預檢(與專業版捆綁)可以驗證很多東西,不僅僅是它在技術上是PDF文件。

+0

準確做到了這一點,它的工作。感謝您的答覆 –

0

您能,如果你直接訪問他們打開「錯誤的」的文件,我收到了這樣的錯誤,這是有問題該客戶端Adobe閱讀器。讀者的某些版本不喜歡某些版本的作者創建的文件。我們能夠通過將客戶的讀者升級到解決我們問題的最新版本來解決此問題。

我還有一個項目,我需要更新PDF文件中的文本。我發現.Net不能直接執行此操作,所以我不得不依賴一個單獨的庫。爲了測試一個文件,你可以使用一個庫在try/catch塊中打開該文件。如果加載失敗,您知道該文件可能已損壞。

希望這會有所幫助。

+0

我注意到的是,根據使用什麼組件創建PDF,版本和格式各不相同,但始終有一個以%PDF爲開頭的標頭 –

+0

對於我們來說,問題在於所有文件都有%PDF,但它這個版本只是一個奇怪的問題。你有沒有檢查'壞'文件,看看他們是否錯過了這個頭部? –

+0

是的。 '壞'版本不包含標題。 –

0

我發現,如果你讀了流閱讀的文件,你讀的第一線,你可以檢查它是否包含下面的%PDF標題標籤:

Dim stream As New StreamReader("C:\Users\dbermudez\Desktop\docBOLR_0.pdf") 
Dim containsPDFHeader As Boolean = True 

If Not stream.ReadLine().Contains("%PDF") Then 
    containsPDFHeader = False 
End If