如何从 .odt 文件中抓取文本
How to grab text from .odt file
我需要从 C# 中的 odf 文件(开放文档格式)中获取所有文本。我找到了 AODL 库,并安装了它。
我访问了 AODL 的页面 https://wiki.openoffice.org 以查找有关如何完成我需要的任务的示例,但都没有成功。出于我无法想象的原因,所有示例都构建了新文档,并且没有关于如何加载文档并获取所有文本的示例(类似于 OpenXML)。你们知道任何可以指导我的参考资料吗?
我的"try"
var doc = new AODL.Document.TextDocuments.TextDocument();
doc.Load(@"C:\path/to/Sample.odt");
但我不知道如何迭代 doc 文档。
终于想通了。这是我创建的用于提取所有文本的方法。也许不完整,因为我不知道构成 .odt 文件的所有部分。此方法获取页眉和页脚、文本框和段落,并将其与 return 回车分隔符连接起来。您需要可以通过包管理器控制台安装的 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();
}
我需要从 C# 中的 odf 文件(开放文档格式)中获取所有文本。我找到了 AODL 库,并安装了它。 我访问了 AODL 的页面 https://wiki.openoffice.org 以查找有关如何完成我需要的任务的示例,但都没有成功。出于我无法想象的原因,所有示例都构建了新文档,并且没有关于如何加载文档并获取所有文本的示例(类似于 OpenXML)。你们知道任何可以指导我的参考资料吗?
我的"try"
var doc = new AODL.Document.TextDocuments.TextDocument();
doc.Load(@"C:\path/to/Sample.odt");
但我不知道如何迭代 doc 文档。
终于想通了。这是我创建的用于提取所有文本的方法。也许不完整,因为我不知道构成 .odt 文件的所有部分。此方法获取页眉和页脚、文本框和段落,并将其与 return 回车分隔符连接起来。您需要可以通过包管理器控制台安装的 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();
}