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

6
我需要在C#中提取odf文件(开放文档格式)中的所有文本。我找到了AODL库,并将其安装。我访问了AODL的页面https://wiki.openoffice.org,以找到执行所需任务的示例,但它们全部失败了。出于某种我无法想象的原因,所有示例都建立了新文档,并且没有示例说明如何加载文档并提取所有文本(类似于OpenXML)。你们知道有什么参考资料可以指导我吗?
我的“尝试”
var doc = new AODL.Document.TextDocuments.TextDocument();
        doc.Load(@"C:\path/to/Sample.odt");

但我不知道如何在doc文档中进行迭代。

你考虑过使用Novacode DocX库吗?我过去曾经使用它来创建或操作Word文档。这是它在codeplex上的链接:https://docx.codeplex.com/ - t_plusplus
1
如果您无法访问您的 .odt 文件,您可以先将文件另存为 .docx 格式,然后使用 Word 库来读取它。 - ManoDestra
你知道有什么可以将odt转换成docx、doc或rtf格式的库吗? - Porkopek
好像AODL库可以导出到HTML。这只是一个解决方法,我可以在接下来的几天里使用它。不过,我仍然想打开ODF文件。这应该不难,毕竟它是开源的! - Porkopek
1
您实际上不需要库。只需在OpenOffice中将文件保存为 .docx。 - ManoDestra
显示剩余2条评论
1个回答

4

最后,我想出了一个方法来提取所有文本。也许不完整,因为我不知道组成.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("\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();
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接