2016-03-27 4 views
0

Ich habe dieses einfache Stück. Das Problem ist sehr seltsam - bei jeder Wiederholung gibt der Leser den gesamten Text seit Beginn des PDF-Dokuments zurück. Wahrscheinlich ist das etwas Einfaches, aber ich kann es nicht sehen.iText GetTextFromPage liefert den Text von Anfang an für alle

... 
PdfReader reader = new PdfReader (path); 
PdfReaderContentParser parser = new PdfReaderContentParser (reader); 
... 
public void Read(int start, int end) 
{ 
    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy(); 

    StringBuilder sb = new StringBuilder(); 

    for (int page = start; page < end; page++) 
    { 
     try 
     { 
      sb.Append(PdfTextExtractor.GetTextFromPage(reader, page, strategy)); 
     } 
     catch (Exception ex) 
     { 
      throw new PdfException(ex.Message, ex.InnerException); 
     } 

     var p = new Page { Number = page, Content = sb.ToString()}; 
     sb.Clear(); 
     PageParsed?.Invoke(this, new PdfEventArgs<Page>(p)); 
    } 
    FileParsed?.Invoke(this, new PdfEventArgs<string>(string.IsNullOrEmpty(Name) ? "File parsed" : Name)); 
} 

Antwort

1

Das strategy Objekt hält den Zustand, so müssen Sie die Objektinstanziierung innerhalb der Schleife wie folgt bewegen:

StringBuilder sb = new StringBuilder(); 

for (int page = start; page < end; page++) 
{ 
    ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy(); 
    try 
    { 
     sb.Append(PdfTextExtractor.GetTextFromPage(reader, page, strategy)); 
    } 
    catch (Exception ex) 
    { 
     throw new PdfException(ex.Message, ex.InnerException); 
    } 

    var p = new Page { Number = page, Content = sb.ToString()}; 
    sb.Clear(); 
    PageParsed?.Invoke(this, new PdfEventArgs<Page>(p)); 
} 

dies Ihr Problem lösen wird.

+0

Danke, wirklich war es einfach. _ "Dieser Renderer verfolgt die aktuelle Y-Position jeder Zeichenfolge." _ Aus der API-Dokumentation - das war nicht so klar. – Matt