2016-07-07 21 views
5

Tüm metinleri C# içindeki odf dosyalarından (açık belge biçimi) almam gerekir. AODL kütüphanesi buldum ve kurdum. İhtiyacım olan görevi nasıl yapacağınıza dair örnekler bulmak için AODL'nin sayfa https://wiki.openoffice.org sayfasını ziyaret ettim, ancak hepsi başarısız oldu. Hayal edemediğim bir nedenden ötürü, tüm örnekler yeni bir belge oluşturur ve bir belgenin nasıl yükleneceğine ve tüm metni (OpenXML gibi) nasıl alacağına dair bir örnek yoktur. Bana rehberlik edecek herhangi bir referans biliyor musunuz?Nasıl .odt dosyasından metin alırsınız?

Benim "dene"

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

Ama doktor belgesi ile yineleme anlamaya olamaz.

+0

Novacode DocX Kitaplığı'nı kullanmayı düşündünüz mü? Kelime belgelerini oluşturmak veya değiştirmek için bunu geçmişte kullanmıştım. İşte bunun için bir bağlantı codeplex: https://docx.codeplex.com/ –

+0

Odf (open office) dosyalarını okumak için ihtiyacım var ve bence DocX sadece okuyor .docx dosyaları – Porkopek

+1

.odt dosyanıza erişim, dosyanızı ilk olarak .docx olarak kaydedebilir, daha sonra okuyabilmek için bir Word lib dosyasını kullanabilirsiniz. – ManoDestra

cevap

2

Sonunda anladım. Bu, tüm metni çıkarmak için yarattığım yöntem. Belki tamamlanmadı, çünkü .odt dosyasını oluşturan tüm parçaları bilmiyorum. Bu yöntem, üstbilgileri ve altbilgileri, metin kutularını ve paragrafları alır ve dönüş arabelleği ayırıcısıyla birleştirir. Paket yöneticisi konsolu üzerinden yüklenebilen AODL paketine ihtiyacınız var: PM> Install-Package AODL. Ve programınızın üst kısmında bulunan

'u ekleyin.

/// <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(); 
    } 
İlgili konular