2016-07-07 8 views
5

C#에서 odf 파일 (열려있는 문서 형식)의 모든 텍스트를 가져와야합니다. AODL 라이브러리를 찾아서 설치했습니다. AODL의 https://wiki.openoffice.org 페이지를 방문하여 필요한 작업 수행 방법에 대한 예제를 찾아 보았지만 실패했습니다. 내가 상상할 수없는 이유는 모든 예제가 새로운 문서를 작성하기 때문이며 문서를로드하고 모든 텍스트 (OpenXML과 같은 것)를 얻는 방법에 대한 예는 없습니다. 너희들이 나를 인도 할 수있는 어떤 참고 자료를 알고 있니?.odt 파일에서 텍스트를 가져 오는 방법

내 "시도"

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

하지만이 문서의 문서를 반복하는 방법을 알아낼 수 없습니다.

+0

Novacode DocX 라이브러리를 사용해 보셨습니까? 나는 워드 문서를 만들거나 조작하기 위해 이것을 과거에 사용 해왔다. 여기에 코드 플렉스에 대한 링크입니다 : https://docx.codeplex.com/ –

+0

내가 파일을 ODF (오픈 오피스)를 읽을 필요는, 그리고 당신이 점점 어려움을 겪고있는 경우 DOCX 그냥 ​​파일을 – Porkopek

+1

을 .DOCX 읽고 생각 .odt 파일에 액세스하려면 .docx로 파일을 저장 한 다음 Word lib를 사용하여 읽을 수 있습니다. – ManoDestra

답변

2

마지막으로 알아 냈습니다. 이것은 모든 텍스트를 추출하기 위해 만든 메서드입니다. .odt 파일을 구성하는 모든 부분을 모르기 때문에 아마 완전하지 않을 수 있습니다. 이 메서드는 머리글과 바닥 글, 텍스트 상자 및 단락을 가져 와서 반환 캐리지 분리 기호와 연결합니다. 패키지 관리자 콘솔 (PM> Install-Package AODL)을 통해 설치할 수있는 AODL 패키지가 필요합니다. 그리고 프로그램 상단에

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

을 추가하십시오.

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