2016-11-15 90 views
1

我試圖從PDF文件中提取文本:http://www.filedropper.com/copy_1,但是我得到的文本不到一頁的一半。 我使用iTextSharp的:PDF提取不完整

PdfReader reader = new PdfReader(file); 
string currentText = PdfTextExtractor.GetTextFromPage(reader, 1); 

我已經使用的,以及代替默認LocationTextExtractionStrategy SimpleTextExtractionStrategy:

PdfTextExtractor.GetTextFromPage(reader, 1, new SimpleTextExtractionStrategy()) 

最初是從微軟報表服務生成的文件(我沒有一個訪問),並且我已經提取了一個頁面來測試文本提取。

任何人都可以幫忙嗎?

+3

您的PDF根本不包含根據PDF規範進行文本提取所需的信息。嘗試從Adobe Reader複製並粘貼缺失的文本部分,您會發現它也會失敗。 Microsoft Reporting Service長期以來一直在創建不足以進行文本提取的PDF。 – mkl

+2

此外,發佈代碼時,請以合理的方式進行。您發佈的代碼會創建一個PDF閱讀器和一個不用於任何內容的提取策略,然後文本提取器使用默認的提取策略從一些模子的閱讀器中提取... – mkl

+0

感謝您的答覆。就像你問的那樣,我修復了那些無知的代碼。 如果acrobat閱讀器顯示它,它如何不包含信息(如數字值)? – Hefass

回答

-1

試試這個: -

PdfReader reader = new PdfReader(file); 
StringBuilder currentText= new StringBuilder(); 
for (int i= 1; i <= reader.NumberOfPages; i++) 
{ 
    currentText.Append(PdfTextExtractor.GetTextFromPage(reader, i)); 
} 

,然後執行您想要的 「currentText」 無論操作。

+0

PDF中只有一個頁面。遍歷文檔中的所有頁面都無濟於事。正如@mkl所示,這是一個「垃圾進入垃圾」問題:文本甚至無法使用Adobe Reader中的複製/粘貼功能進行提取。 –

+0

您的建議實際上是迭代所有PDF頁面,而不是隻查看第一個頁面。由於OP的示例文檔只有一個頁面,所以這不會造成差別。然而,與OP的代碼相反,您的代碼至少是一致的...... – mkl

+0

您絕對是對的。其實,我沒有檢查.pdf文件本身。剛剛發佈了一個更好的代碼,他迄今爲止所做的一切。 – Nitin