2014-01-06 93 views
2

我試圖從多頁PDF文件中的每個頁面的特定位置提取一段文本。當我使用iText從PDF文件中提取文本時我從前面的頁面獲取值

我有文本的位置,我能夠在第一頁上正確提取它。 但是在第一頁之後的頁面上,提取的文本似乎在積累。

例如,如果頁面1上的文本值是「A」,頁面2是「B」,頁面3是「C」,那麼我在我的輸出字符串中通過FOR循環進行每次迭代接收以下值:

循環1:輸出= A

環2:輸出= BA

循環3:輸出= CBA

我在我的p使用iTextSharp的項目,用C#編寫。

任何幫助,將不勝感激。

var reader = new PdfReader(foregroundFile); 

RectangleJ customerIdRectangle = new RectangleJ(0, 495, 108, 27); 
RenderFilter[] filters = new RenderFilter[1]; 
LocationTextExtractionStrategy regionFilter = new LocationTextExtractionStrategy(); 
filters[0] = new RegionTextRenderFilter(customerIdRectangle); 
FilteredTextRenderListener strategy = new FilteredTextRenderListener(regionFilter, filters); 

for (int i = 1; i <= reader.NumberOfPages; i++) 
{ 
    string output = ""; 
    output = PdfTextExtractor.GetTextFromPage(reader, i, strategy); 
    Console.WriteLine(output); 
} 
+0

我有同樣的問題。閱讀Bruno Lowagie給出的答案後,當我每次閱讀頁面時重新初始化LocationTextExtractionStrategy而不是重複使用同一個頁面時,問題就消失了。 LocationTextExtractionStrategy ltes = new LocationTextExtractionStrategy(); string thePage = PdfTextExtractor.GetTextFromPage(_pdf_Reader,pageNumber,ltes); – JRB

回答

3

請調整你的代碼是這樣的:

var reader = new PdfReader(foregroundFile); 

RectangleJ customerIdRectangle = new RectangleJ(0, 495, 108, 27); 

for (int i = 1; i <= reader.NumberOfPages; i++) 
{ 
    RenderFilter[] filters = new RenderFilter[1]; 
    LocationTextExtractionStrategy regionFilter = new LocationTextExtractionStrategy(); 
    filters[0] = new RegionTextRenderFilter(customerIdRectangle); 
    FilteredTextRenderListener strategy = new FilteredTextRenderListener(regionFilter, filters); 
    string output = ""; 
    output = PdfTextExtractor.GetTextFromPage(reader, i, strategy); 
    Console.WriteLine(output); 
} 
+0

感謝布魯諾 - 這確實糾正了我遇到的問題,結果符合我的預期。你能否就我做錯了什麼,或者爲什麼你的方法有效而給出一些解釋? –

+1

過濾器保持狀態。 –

相關問題