2014-07-24 46 views
0

我想用c#的iText庫來捕獲PDF文件的文本部分。iText不返回PDF的文本內容第一頁後

我從excel 2013(導出)創建了一個pdf,然後從web如何使用itext(添加了lib ref到項目)複製樣本。

它完美地讀取了第一頁,但是之後它獲得了亂碼信息。它保留了第一頁的一部分,並將信息與下一頁合併。註釋行是當我試圖解決問題時,字符串「thePage」在for循環內重新創建。

這是代碼。我可以通過電子郵件發送給任何可以幫助解決這個問題的人。

在此先感謝

public static string ExtractTextFromPdf(string path) 
    { 

     ITextExtractionStrategy its = new iTextSharp.text.pdf.parser.LocationTextExtractionStrategy(); 

     using (PdfReader reader = new PdfReader(path)) 
     { 
      StringBuilder text = new StringBuilder(); 

      //string[] theLines; 
      //theLines = new string[COLUMNS]; 
      //string thePage; 

      for (int i = 1; i <= reader.NumberOfPages; i++) 
      { 
       string thePage = ""; 
       thePage = PdfTextExtractor.GetTextFromPage(reader, i, its); 

       string [] theLines = thePage.Split('\n'); 
       foreach (var theLine in theLines) 
       { 
        text.AppendLine(theLine); 
       } 
      // text.AppendLine(" "); 
      // Array.Clear(theLines, 0, theLines.Length); 
      // thePage = ""; 
      } 
      return text.ToString(); 
     } 
    } 
+0

爲每個頁面使用新的策略對象。策略對象收集文本數據,並不知道新頁面是否已啓動。 – mkl

+0

謝謝,我在循環內部實例化了它的對象並解決了這個問題。我知道我應該「解決問題的答案」,但我不知道如何。不管怎樣,謝謝你的迴應。 – user1555945

+0

我只創建了一條評論,而不是一個答案。我會做出明確的答案,您可以通過點擊左側的標記來接受答案。 – mkl

回答

0

一個策略對象收集文本數據,如果新的一頁已經開始或沒有不知道的。

因此,爲每個頁面使用一個新的策略對象。

+0

對不起,我必須有15個聲望才能投票。無論如何感謝 – user1555945

+0

Upvoting沒有必要,但接受將是適當的。 – mkl

+0

我絕對接受你的回答,如果有一個程序「接受」答案,我再一次對此毫無所知。我很重視在網站上遇到的資源,但我在一家小商店工作,必須戴許多帽子,所以我從來沒有參加如何行使適當的「禮儀」。無論如何,您都會爲我的項目節省一些時間。 – user1555945

相關問題