如何从文件中抓取文本.odt



我需要从 C# 中的 odf 文件(开放文档格式)中获取所有文本。我找到了AODL库,并安装了它。我 https://wiki.openoffice.org 访问了AODL的页面,以找到有关如何完成我需要的任务的示例,但它们都没有成功。出于我无法想象的原因,所有示例都构建新文档,并且没有关于如何加载文档和获取所有文本的示例(类似于 OpenXML)。你们知道有什么可以指导我的参考资料吗?

我的"尝试"

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

但是我不知道如何使用文档文档进行迭代。

终于,我想通了。这是我创建的提取所有文本的方法。也许不完整,因为我不知道构成.odt文件的所有部分。此方法获取页眉和页脚、文本框和段落,并将其与回车分隔符连接起来。您需要 AODL 软件包,该软件包可以通过软件包管理器控制台安装:PM> Install-Package 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("rn", 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("rn", mainPart.Select(x => x.Node.InnerText));
            //Append both text variables
            sb.Append(stylesText + "rn");
            sb.Append(mainText);
        }


        return sb.ToString();
    }

最新更新