2016-07-07 12 views
5

Ich muss den gesamten Text aus ODF-Dateien (öffnen Dokumentformat) in C#. Ich habe die AODL-Bibliothek gefunden und installiert. Ich besuchte AODL's Seite https://wiki.openoffice.org, um Beispiele zu finden, wie ich die Aufgabe, die ich brauche, aber sie waren alle erfolglos. Aus einem Grund, den ich mir nicht vorstellen kann, erstellen alle Beispiele ein neues Dokument, und es gibt kein Beispiel dafür, wie man ein Dokument lädt und den ganzen Text (etwas wie OpenXML) ergreift. Kennst du irgendwelche Hinweise, die mich leiten können?So greifen Sie Text aus der .odt-Datei

Meine „versuchen“

var doc = new AODL.Document.TextDocuments.TextDocument(); 
     doc.Load(@"C:\path/to/Sample.odt"); 

Aber ich kann nicht herausfinden, wie man mit dem doc-Dokument zu durchlaufen.

+0

Haben Sie in Betracht gezogen, die Novacode DocX Library zu verwenden? Ich habe das in der Vergangenheit verwendet, um Word-Dokumente zu erstellen oder zu manipulieren. Hier ist ein Link dafür auf Codeplex: https://docx.codeplex.com/ –

+0

Ich brauche es zu lesen ODF (Open Office) -Dateien, und ich denke, DocX liest gerade. DOCX-Dateien – Porkopek

+1

Wenn Sie kämpfen, bekommen Wenn Sie auf Ihre ODT-Datei zugreifen, können Sie Ihre Datei zuerst als DOCX-Datei speichern und dann mit einer Word-Bibliothek lesen. – ManoDestra

Antwort

2

Schließlich habe ich herausgefunden. Dies ist die Methode, die ich erstellt habe, um den gesamten Text zu extrahieren. Vielleicht ist nicht vollständig, weil ich nicht alle Teile kenne, die die .odt-Datei bilden. Diese Methode erfasst Kopf- und Fußzeilen, Textfelder und Absätze und verkettet sie mit dem Trennzeichen für den Zeilenumbruch. Sie benötigen das AODL-Paket, das über die Paketmanagerkonsole installiert werden kann: PM> Install-Package AODL. Und fügen

using AODL.Document.TextDocuments; 
using AODL.Document.Content; 

an der Oberseite Ihres Programms hinzu.

/// <summary> 
    /// Gets all plain text from an .odt file 
    /// </summary> 
    /// <param name="path"> 
    /// the physical path of the file 
    /// </param> 
    /// <returns>a string with all text content</returns> 
    public String GetTextFromOdt(String path) 
    { 
     var sb = new StringBuilder(); 
     using (var doc = new TextDocument()) 
     { 
      doc.Load(path); 

      //The header and footer are in the DocumentStyles part. Grab the XML of this part 
      XElement stylesPart = XElement.Parse(doc.DocumentStyles.Styles.OuterXml); 
      //Take all headers and footers text, concatenated with return carriage 
      string stylesText = string.Join("\r\n", stylesPart.Descendants().Where(x => x.Name.LocalName == "header" || x.Name.LocalName == "footer").Select(y => y.Value)); 

      //Main content 
      var mainPart = doc.Content.Cast<IContent>(); 
      var mainText = String.Join("\r\n", mainPart.Select(x => x.Node.InnerText)); 

      //Append both text variables 
      sb.Append(stylesText + "\r\n"); 
      sb.Append(mainText); 
     } 




     return sb.ToString(); 
    }