如何在 .NET 中处理文本

如何在 .NET 中处理文本

本指南展示了如何在 Aspose.Words FOSS for .NET 中处理文本:为运行设置字体、为段落设置格式、使用 Range 查找和替换文本、添加批注,以及将段落转换为列表项。Aspose.Words FOSS for .NET 可通过 NuGet 获取,或从源码构建。

分步指南

步骤 1:获取库

克隆仓库并构建 Aspose.Words.sln 在 Release 配置下,然后添加项目引用到 Aspose.Words.csproj 从您自己的 .NET 项目中,如在 安装指南。添加 using Aspose.Words; 在任何处理文本的文件顶部。


步骤 2:设置运行的字体

一个 Run 是一段共享同一套格式的文本;其 Text 属性保存纯文本内容,Font 属性(一个 Font 对象)保存字符级别的格式——包括 Name、Size、Bold、Italic、Underline、Color、HighlightColor、Subscript/Superscript 以及 StrikeThrough 等。Font.ClearFormatting() 可将运行重置为默认。段落的运行可通过其 Runs 属性(一个 RunCollection)访问。在写入新文本之前对 DocumentBuilder.Font 设置字体属性通常比事后为各个 Run 对象格式化更简单。


步骤 3:格式化段落

Paragraph.ParagraphFormat(一个 ParagraphFormat 对象)控制段落级布局:Alignment、缩进(LeftIndent、RightIndent、FirstLineIndent)、间距(SpaceBefore、SpaceAfter、LineSpacing、LineSpacingRule)以及分页行为(KeepTogether、KeepWithNext、PageBreakBefore、WidowControl)。ParagraphFormat.ClearFormatting() 将这些重置为默认值,Paragraph.JoinRunsWithSameFormatting() 合并具有相同格式的相邻运行 —— 在一系列程序化编辑导致段落运行数量超过必要时非常有用。


步骤 4:使用范围查找和替换文本

每个承载内容的节点——Document、Section、Paragraph 或 Run——都公开一个 Range。Range.Text 返回该范围内所有内容的纯文本,Range.Replace(pattern, replacement) 执行仅针对该范围的查找替换:在 Paragraph 的 Range 上调用它即可仅更改一个段落中的文本,或在 Document.Range 上调用以搜索整个文档。Range.Delete() 直接删除该范围的内容。


步骤 5:添加评论

使用 new Comment(doc, author, initial, dateTime) 构造一个 Comment,用 SetText(text) 设置其文本,然后像其他节点一样将其插入树中。Comment.AddReply(author, initial, dateTime, text) 附加一个线程回复——它本身是一个 Comment——而 RemoveReply(reply) / RemoveAllReplies() 则将回复取回。文档的评论被收集在一个 CommentCollection 中。


步骤 6:将段落转换为列表项

Paragraph.ListFormat(一个 ListFormat 对象)报告并控制段落是否参与列表:IsListItem 和 ListLevelNumber 报告其当前状态。ApplyBulletDefault() 将段落转换为默认的项目符号项,ApplyNumberDefault() 则转换为默认的编号项;ListIndent() / ListOutdent() 更改其嵌套层级,RemoveNumbers() 将其恢复为普通段落。

常见问题与解决方案

格式化一个 Run’s 字体不会更改相邻的文本。 相邻的文本是不同的 Run 拥有自己的 Font 实例。要么定位并格式化每个受影响的 Run,或者在 DocumentBuilder.Font 在写入新文本之前。

Range.Replace 更改了预期区域之外的文本。 Replace 在…上被调用 Document.Range 而不是更窄节点的范围。请在特定的 Paragraph or Section 其文本应更改。

段落看起来像项目符号列表项,但 IsListItem is false. 项目符号是键入的文本,而不是真正的列表格式。使用以下方式应用它 ListFormat.ApplyBulletDefault() 而不是。

文档最终会出现更多的 Run 节点,超出预期。 重复的小程序编辑会拆分运行块而不重新连接它们。调用 Paragraph.JoinRunsWithSameFormatting() 在一批编辑之后。

常见问题

Run 和 Paragraph 有何区别?

一个 Run 是共享一套字符格式(Font)的文本跨度。一个 Paragraph 是包含一个或多个运行以及段落级格式(ParagraphFormat)的复合节点。

我如何读取文档中或单个章节中的所有文本?

读取该节点的 Range 的 Text 属性——document.Range.Text 或 section.Range.Text。

我如何只在单个段落内替换文本,而不是整个文档?

在那个 Paragraph 的 Range 上调用 Replace(pattern, replacement),而不是在 Document.Range 上。

我如何回复已有的评论?

在原始的 Comment 实例上调用 Comment.AddReply(author, initial, dateTime, text)。

我如何将编号列表项恢复为普通段落?

对该段落的ListFormat调用RemoveNumbers()。

另请参阅

 中文