Aspose.Words for .NET下载地址 https://soft51.cc/software/175811283999782847
段落是Word文档中最基本的内容单元之一,掌握段落操作是文档处理的核心技能。本教程将深入讲解如何使用Aspose.Words for .NET进行各种段落操作,包括创建、格式设置、对齐、缩进、间距调整、列表处理、边框底纹以及制表位设置。
using Aspose.Words;
using Aspose.Words.Drawing;
// 创建新文档
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 方法一:使用DocumentBuilder创建段落
builder.Writeln("这是第一个段落。");
builder.Writeln("这是第二个段落。");
// 方法二:直接操作段落对象
Paragraph para = new Paragraph(doc);
Run run = new Run(doc, "这是通过段落对象创建的内容。");
para.AppendChild(run);
doc.FirstSection.Body.AppendChild(para);
doc.Save("段落创建示例.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 设置段落格式
ParagraphFormat paragraphFormat = builder.ParagraphFormat;
// 段落对齐方式
paragraphFormat.Alignment = ParagraphAlignment.Center;
// 首行缩进
paragraphFormat.FirstLineIndent = 20;
// 左缩进和右缩进
paragraphFormat.LeftIndent = 30;
paragraphFormat.RightIndent = 30;
// 段前距和段后距
paragraphFormat.SpaceBefore = 12;
paragraphFormat.SpaceAfter = 12;
builder.Writeln("这是一个设置了各种格式的段落。");
doc.Save("段落格式设置.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 应用内置样式
builder.ParagraphFormat.StyleName = "Heading 1";
builder.Writeln("标题1样式");
// 创建自定义段落样式
Style customStyle = doc.Styles.Add(StyleType.Paragraph, "CustomParagraph");
customStyle.ParagraphFormat.Alignment = ParagraphAlignment.Justify;
customStyle.Font.Name = "微软雅黑";
customStyle.Font.Size = 12;
customStyle.Font.Color = Color.DarkBlue;
// 应用自定义样式
builder.ParagraphFormat.Style = customStyle;
builder.Writeln("这是应用了自定义样式的段落。");
doc.Save("段落样式应用.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 左对齐(默认)
builder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
builder.Writeln("左对齐段落:这是左对齐的文本内容。");
// 右对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Right;
builder.Writeln("右对齐段落:这是右对齐的文本内容。");
// 居中对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
builder.Writeln("居中对齐段落:这是居中对齐的文本内容。");
// 两端对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Justify;
builder.Writeln("两端对齐段落:这是两端对齐的文本内容,文本会在左右边距之间均匀分布。");
// 分散对齐
builder.ParagraphFormat.Alignment = ParagraphAlignment.Distributed;
builder.Writeln("分散对齐段落:这是分散对齐的文本内容。");
doc.Save("段落对齐示例.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 首行缩进
builder.ParagraphFormat.FirstLineIndent = 24; // 2字符(12*2)
builder.Writeln("首行缩进段落:这个段落的首行向右缩进了2个字符的距离。");
// 左缩进
builder.ParagraphFormat.FirstLineIndent = 0;
builder.ParagraphFormat.LeftIndent = 36; // 3字符
builder.Writeln("左缩进段落:整个段落向右缩进了3个字符的距离。");
// 右缩进
builder.ParagraphFormat.LeftIndent = 0;
builder.ParagraphFormat.RightIndent = 36;
builder.Writeln("右缩进段落:整个段落的右边距向内缩进了3个字符的距离。");
// 悬挂缩进(首行突出)
builder.ParagraphFormat.RightIndent = 0;
builder.ParagraphFormat.LeftIndent = 36;
builder.ParagraphFormat.FirstLineIndent = -18; // 负值表示悬挂缩进
builder.Writeln("悬挂缩进段落:首行向左突出,其余行向右缩进,常用于项目符号列表。");
doc.Save("段落缩进示例.docx");
public void SetParagraphIndentsByLevel(Document doc, int level)
{
DocumentBuilder builder = new DocumentBuilder(doc);
// 根据级别设置缩进
double leftIndent = level * 24; // 每级缩进24磅(2字符)
builder.ParagraphFormat.LeftIndent = leftIndent;
builder.ParagraphFormat.FirstLineIndent = 24; // 首行再缩进2字符
builder.Writeln($"第{level}级段落:这是第{level}级的段落内容。");
}
// 使用示例
Document doc = new Document();
for (int i = 1; i <= 3; i++)
{
SetParagraphIndentsByLevel(doc, i);
}
doc.Save("分级缩进示例.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 单倍行距
builder.ParagraphFormat.LineSpacingRule = LineSpacingRule.Single;
builder.Writeln("单倍行距:这是单倍行距的段落。这是单倍行距的段落。这是单倍行距的段落。");
// 1.5倍行距
builder.ParagraphFormat.LineSpacingRule = LineSpacingRule.OneAndHalf;
builder.Writeln("1.5倍行距:这是1.5倍行距的段落。这是1.5倍行距的段落。这是1.5倍行距的段落。");
// 双倍行距
builder.ParagraphFormat.LineSpacingRule = LineSpacingRule.Double;
builder.Writeln("双倍行距:这是双倍行距的段落。这是双倍行距的段落。这是双倍行距的段落。");
// 固定行距
builder.ParagraphFormat.LineSpacingRule = LineSpacingRule.Exactly;
builder.ParagraphFormat.LineSpacing = 18; // 18磅固定行距
builder.Writeln("固定行距:这是18磅固定行距的段落。这是18磅固定行距的段落。");
// 最小行距
builder.ParagraphFormat.LineSpacingRule = LineSpacingRule.AtLeast;
builder.ParagraphFormat.LineSpacing = 15; // 最小15磅行距
builder.Writeln("最小行距:这是最小15磅行距的段落。这是最小15磅行距的段落。");
doc.Save("行间距设置示例.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 段前距设置
builder.ParagraphFormat.SpaceBefore = 12; // 12磅段前距
builder.ParagraphFormat.SpaceAfter = 6; // 6磅段后距
builder.Writeln("第一个段落:设置了12磅段前距和6磅段后距。");
// 不同段间距设置
builder.ParagraphFormat.SpaceBefore = 6;
builder.ParagraphFormat.SpaceAfter = 12;
builder.Writeln("第二个段落:设置了6磅段前距和12磅段后距。");
// 自动段间距
builder.ParagraphFormat.SpaceBeforeAuto = true;
builder.ParagraphFormat.SpaceAfterAuto = true;
builder.Writeln("第三个段落:使用了自动段间距设置。");
doc.Save("段间距设置示例.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 设置字符间距
builder.Font.Spacing = 2; // 字符间距2磅
builder.ParagraphFormat.LineSpacingRule = LineSpacingRule.Multiple;
builder.ParagraphFormat.LineSpacing = 1.2; // 1.2倍行距
builder.Writeln("字符和行间距调整:这个段落调整了字符间距和行间距。");
// 段落内字符格式对行距的影响
builder.Font.Spacing = 0;
builder.Font.Size = 24; // 大字号
builder.ParagraphFormat.LineSpacingRule = LineSpacingRule.AtLeast;
builder.ParagraphFormat.LineSpacing = 12;
builder.Writeln("大字号段落:字号较大时需要调整最小行距以避免重叠。");
doc.Save("高级间距控制.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 创建项目符号列表
builder.ListFormat.ApplyBulletDefault();
builder.Writeln("第一个项目符号项");
builder.Writeln("第二个项目符号项");
builder.Writeln("第三个项目符号项");
// 创建子级项目符号
builder.ListFormat.ListIndent();
builder.Writeln("二级项目符号项1");
builder.Writeln("二级项目符号项2");
// 返回上级
builder.ListFormat.ListOutdent();
builder.Writeln("第四个项目符号项");
// 移除列表格式
builder.ListFormat.RemoveNumbers();
builder.Writeln("普通段落");
doc.Save("项目符号列表.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 创建编号列表
builder.ListFormat.ApplyNumberDefault();
builder.Writeln("第一个编号项");
builder.Writeln("第二个编号项");
builder.Writeln("第三个编号项");
// 创建子级编号
builder.ListFormat.ListIndent();
builder.Writeln("二级编号项1");
builder.Writeln("二级编号项2");
// 继续子级编号
builder.ListFormat.ListIndent();
builder.Writeln("三级编号项1");
builder.Writeln("三级编号项2");
// 返回二级
builder.ListFormat.ListOutdent();
builder.Writeln("二级编号项3");
// 返回一级
builder.ListFormat.ListOutdent();
builder.Writeln("第四个编号项");
doc.Save("编号列表.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 创建自定义列表
List list = doc.Lists.Add(ListTemplate.BulletDefault);
// 自定义一级项目符号
ListLevel level1 = list.ListLevels[0];
level1.NumberFormat = "●"; // 使用实心圆点
level1.TrailingCharacter = ListTrailingCharacter.Space;
level1.NumberPosition = 0;
level1.TextPosition = 18;
// 自定义二级项目符号
ListLevel level2 = list.ListLevels[1];
level2.NumberFormat = "○"; // 使用空心圆点
level2.TrailingCharacter = ListTrailingCharacter.Space;
level2.NumberPosition = 36;
level2.TextPosition = 54;
// 应用自定义列表
builder.ListFormat.List = list;
builder.Writeln("一级项目1");
builder.Writeln("一级项目2");
builder.ListFormat.ListIndent();
builder.Writeln("二级项目1");
builder.Writeln("二级项目2");
doc.Save("自定义列表样式.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 创建多级编号列表
List numberList = doc.Lists.Add(ListTemplate.NumberArabicDot);
// 自定义各级编号格式
ListLevel level1 = numberList.ListLevels[0];
level1.NumberFormat = "第\x0000章"; // \x0000代表编号占位符
level1.TrailingCharacter = ListTrailingCharacter.Space;
ListLevel level2 = numberList.ListLevels[1];
level2.NumberFormat = "\x0001.\x0000"; // \x0001表示上级编号
level2.TrailingCharacter = ListTrailingCharacter.Space;
ListLevel level3 = numberList.ListLevels[2];
level3.NumberFormat = "(\x0000)";
level3.TrailingCharacter = ListTrailingCharacter.Tab;
builder.ListFormat.List = numberList;
builder.Writeln("概述");
builder.ListFormat.ListIndent();
builder.Writeln("基础概念");
builder.ListFormat.ListIndent();
builder.Writeln("核心原理");
builder.Writeln("应用场景");
doc.Save("复杂编号格式.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 设置段落边框
Borders borders = builder.ParagraphFormat.Borders;
// 上边框
borders.Top.LineStyle = LineStyle.Single;
borders.Top.LineWidth = 1.0;
borders.Top.Color = Color.Blue;
// 下边框
borders.Bottom.LineStyle = LineStyle.Double;
borders.Bottom.LineWidth = 1.5;
borders.Bottom.Color = Color.Red;
// 左边框
borders.Left.LineStyle = LineStyle.DashDot;
borders.Left.LineWidth = 1.0;
borders.Left.Color = Color.Green;
// 右边框
borders.Right.LineStyle = LineStyle.Dotted;
borders.Right.LineWidth = 1.0;
borders.Right.Color = Color.Orange;
// 边框到文本的距离
borders.DistanceFromText = 5.0;
builder.Writeln("这个段落设置了四周不同样式的边框。");
doc.Save("段落边框设置.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 设置段落底纹
Shading shading = builder.ParagraphFormat.Shading;
// 纯色底纹
shading.Texture = TextureIndex.TextureSolid;
shading.BackgroundPatternColor = Color.LightBlue;
builder.Writeln("这个段落有淡蓝色底纹。");
// 渐变底纹
builder.ParagraphFormat.Shading.Texture = TextureIndex.Texture25Percent;
builder.ParagraphFormat.Shading.BackgroundPatternColor = Color.Yellow;
builder.ParagraphFormat.Shading.ForegroundPatternColor = Color.Red;
builder.Writeln("这个段落有25%纹理的渐变底纹。");
// 重置底纹
builder.ParagraphFormat.Shading.Clear();
builder.Writeln("这个段落没有底纹。");
doc.Save("段落底纹设置.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 创建信息框样式
ParagraphFormat format = builder.ParagraphFormat;
// 设置边框
format.Borders.LineStyle = LineStyle.Single;
format.Borders.LineWidth = 2.0;
format.Borders.Color = Color.DarkBlue;
format.Borders.DistanceFromText = 8.0;
// 设置底纹
format.Shading.Texture = TextureIndex.TextureSolid;
format.Shading.BackgroundPatternColor = Color.LightCyan;
// 设置内边距
format.LeftIndent = 20;
format.RightIndent = 20;
format.SpaceBefore = 10;
format.SpaceAfter = 10;
builder.Writeln("重要提示:这是一个带有边框和底纹的信息框段落,用于突出重要内容。");
doc.Save("边框底纹组合.docx");
public void CreateInfoBox(DocumentBuilder builder, string title, string content, Color borderColor, Color backgroundColor)
{
// 保存当前格式
ParagraphFormat originalFormat = builder.ParagraphFormat;
// 标题段落
builder.ParagraphFormat.Borders.Top.LineStyle = LineStyle.Single;
builder.ParagraphFormat.Borders.Left.LineStyle = LineStyle.Single;
builder.ParagraphFormat.Borders.Right.LineStyle = LineStyle.Single;
builder.ParagraphFormat.Borders.Top.Color = borderColor;
builder.ParagraphFormat.Borders.Left.Color = borderColor;
builder.ParagraphFormat.Borders.Right.Color = borderColor;
builder.ParagraphFormat.Shading.BackgroundPatternColor = backgroundColor;
builder.ParagraphFormat.LeftIndent = 10;
builder.ParagraphFormat.RightIndent = 10;
builder.Font.Bold = true;
builder.Write(title);
builder.InsertBreak(BreakType.LineBreak);
// 内容段落
builder.ParagraphFormat.Borders.Bottom.LineStyle = LineStyle.Single;
builder.ParagraphFormat.Borders.Bottom.Color = borderColor;
builder.Font.Bold = false;
builder.Writeln(content);
// 恢复格式
builder.ParagraphFormat.ClearFormatting();
}
// 使用示例
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
CreateInfoBox(builder, "提示", "这是一个提示信息框。", Color.Blue, Color.LightBlue);
CreateInfoBox(builder, "警告", "这是一个警告信息框。", Color.Orange, Color.LightYellow);
CreateInfoBox(builder, "错误", "这是一个错误信息框。", Color.Red, Color.LightPink);
doc.Save("信息框样式.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 获取制表位集合
TabStopCollection tabStops = builder.ParagraphFormat.TabStops;
// 添加不同类型的制表位
tabStops.Add(new TabStop(100, TabAlignment.Left, TabLeader.None)); // 左对齐
tabStops.Add(new TabStop(200, TabAlignment.Center, TabLeader.Dots)); // 居中对齐,点线引导符
tabStops.Add(new TabStop(300, TabAlignment.Right, TabLeader.Dashes)); // 右对齐,虚线引导符
tabStops.Add(new TabStop(400, TabAlignment.Decimal, TabLeader.Line)); // 小数点对齐,下划线引导符
// 使用制表位
builder.Write("姓名");
builder.Write("\t");
builder.Write("年龄");
builder.Write("\t");
builder.Write("工资");
builder.Write("\t");
builder.Writeln("评分");
builder.Write("张三");
builder.Write("\t");
builder.Write("25");
builder.Write("\t");
builder.Write("5000.00");
builder.Write("\t");
builder.Writeln("88.5");
doc.Save("基础制表位.docx");
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 创建目录样式的制表位
TabStopCollection tabStops = builder.ParagraphFormat.TabStops;
tabStops.Add(new TabStop(450, TabAlignment.Right, TabLeader.Dots));
// 模拟目录项
string[] chapters = {
"第一章 概述",
"第二章 基础知识",
"第三章 高级应用",
"第四章 实战案例",
"第五章 性能优化"
};
int[] pages = { 1, 15, 45, 78, 102 };
for (int i = 0; i < chapters.Length; i++)
{
builder.Write(chapters[i]);
builder.Write("\t");
builder.Writeln(pages[i].ToString());
}
// 添加分隔线
builder.ParagraphFormat.TabStops.Clear();
builder.Writeln();
// 创建价格表样式
tabStops.Add(new TabStop(150, TabAlignment.Left, TabLeader.None));
tabStops.Add(new TabStop(300, TabAlignment.Decimal, TabLeader.Dots));
tabStops.Add(new TabStop(400, TabAlignment.Right, TabLeader.None));
builder.Writeln("商品\t价格\t数量");
builder.Writeln("苹果\t12.50\t10");
builder.Writeln("香蕉\t8.00\t15");
builder.Writeln("橘子\t15.75\t8");
doc.Save("制表位高级应用.docx");
public class TabStopManager
{
private DocumentBuilder builder;
public TabStopManager(DocumentBuilder builder)
{
this.builder = builder;
}
// 设置表格式制表位
public void SetTableTabs(double[] positions, TabAlignment[] alignments, TabLeader[] leaders = null)
{
builder.ParagraphFormat.TabStops.Clear();
for (int i = 0; i < positions.Length; i++)
{
TabAlignment alignment = i < alignments.Length ? alignments[i] : TabAlignment.Left;
TabLeader leader = leaders != null && i < leaders.Length ? leaders[i] : TabLeader.None;
builder.ParagraphFormat.TabStops.Add(new TabStop(positions[i], alignment, leader));
}
}
// 写入表格行
public void WriteTableRow(params string[] values)
{
for (int i = 0; i < values.Length; i++)
{
if (i > 0) builder.Write("\t");
builder.Write(values[i]);
}
builder.Writeln();
}
// 清除制表位
public void ClearTabs()
{
builder.ParagraphFormat.TabStops.Clear();
}
}
// 使用示例
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
TabStopManager tabManager = new TabStopManager(builder);
// 创建员工信息表
double[] positions = { 100, 200, 300, 400 };
TabAlignment[] alignments = {
TabAlignment.Left,
TabAlignment.Center,
TabAlignment.Right,
TabAlignment.Decimal
};
TabLeader[] leaders = {
TabLeader.None,
TabLeader.Dots,
TabLeader.Dashes,
TabLeader.Line
};
tabManager.SetTableTabs(positions, alignments, leaders);
// 写入表头
tabManager.WriteTableRow("姓名", "部门", "工号", "薪资");
tabManager.WriteTableRow("----", "----", "----", "----");
// 写入数据
tabManager.WriteTableRow("李明", "技术部", "T001", "8500.00");
tabManager.WriteTableRow("王芳", "市场部", "M002", "7200.50");
tabManager.WriteTableRow("张伟", "财务部", "F003", "6800.75");
doc.Save("动态制表位管理.docx");
public static class TabStylePresets
{
// 目录样式
public static void ApplyTocStyle(ParagraphFormat format, double width = 450)
{
format.TabStops.Clear();
format.TabStops.Add(new TabStop(width, TabAlignment.Right, TabLeader.Dots));
}
// 价格表样式
public static void ApplyPriceTableStyle(ParagraphFormat format)
{
format.TabStops.Clear();
format.TabStops.Add(new TabStop(200, TabAlignment.Left, TabLeader.None));
format.TabStops.Add(new TabStop(300, TabAlignment.Decimal, TabLeader.Dots));
format.TabStops.Add(new TabStop(400, TabAlignment.Right, TabLeader.None));
}
// 对话框样式
public static void ApplyDialogStyle(ParagraphFormat format)
{
format.TabStops.Clear();
format.TabStops.Add(new TabStop(100, TabAlignment.Right, TabLeader.None));
format.TabStops.Add(new TabStop(120, TabAlignment.Left, TabLeader.None));
}
// 代码缩进样式
public static void ApplyCodeStyle(ParagraphFormat format)
{
format.TabStops.Clear();
// 每4个字符一个制表位
for (int i = 1; i <= 10; i++)
{
format.TabStops.Add(new TabStop(i * 24, TabAlignment.Left, TabLeader.None));
}
}
}
// 使用预设样式
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// 目录样式示例
builder.Writeln("目录");
TabStylePresets.ApplyTocStyle(builder.ParagraphFormat);
builder.Write("第一章 简介\t1");
builder.Writeln();
builder.Write("第二章 安装\t10");
builder.Writeln();
// 价格表样式示例
builder.Writeln("\n价格表");
TabStylePresets.ApplyPriceTableStyle(builder.ParagraphFormat);
builder.Write("产品名称\t单价\t备注");
builder.Writeln();
builder.Write("笔记本电脑\t5999.99\t促销");
builder.Writeln();
doc.Save("制表位样式预设.docx");
public void ApplyFormatToMultipleParagraphs(Document doc, string styleName, int startIndex, int count)
{
NodeCollection paragraphs = doc.GetChildNodes(NodeType.Paragraph, true);
for (int i = startIndex; i < Math.Min(startIndex + count, paragraphs.Count); i++)
{
Paragraph para = (Paragraph)paragraphs[i];
para.ParagraphFormat.StyleName = styleName;
}
}
public void AutoAdjustParagraphSpacing(Document doc)
{
foreach (Paragraph para in doc.GetChildNodes(NodeType.Paragraph, true))
{
// 根据段落内容长度调整间距
int textLength = para.GetText().Trim().Length;
if (textLength > 100)
{
para.ParagraphFormat.SpaceAfter = 12;
}
else if (textLength > 50)
{
para.ParagraphFormat.SpaceAfter = 8;
}
else
{
para.ParagraphFormat.SpaceAfter = 6;
}
}
}
public void CopyParagraphFormat(Paragraph sourcePara, Paragraph targetPara)
{
// 复制段落格式
targetPara.ParagraphFormat.Alignment = sourcePara.ParagraphFormat.Alignment;
targetPara.ParagraphFormat.LeftIndent = sourcePara.ParagraphFormat.LeftIndent;
targetPara.ParagraphFormat.RightIndent = sourcePara.ParagraphFormat.RightIndent;
targetPara.ParagraphFormat.FirstLineIndent = sourcePara.ParagraphFormat.FirstLineIndent;
targetPara.ParagraphFormat.SpaceBefore = sourcePara.ParagraphFormat.SpaceBefore;
targetPara.ParagraphFormat.SpaceAfter = sourcePara.ParagraphFormat.SpaceAfter;
targetPara.ParagraphFormat.LineSpacing = sourcePara.ParagraphFormat.LineSpacing;
targetPara.ParagraphFormat.LineSpacingRule = sourcePara.ParagraphFormat.LineSpacingRule;
// 复制边框设置
targetPara.ParagraphFormat.Borders.ClearFormatting();
foreach (Border border in sourcePara.ParagraphFormat.Borders)
{
Border targetBorder = targetPara.ParagraphFormat.Borders[border.BorderType];
targetBorder.LineStyle = border.LineStyle;
targetBorder.LineWidth = border.LineWidth;
targetBorder.Color = border.Color;
}
// 复制底纹设置
targetPara.ParagraphFormat.Shading.Texture = sourcePara.ParagraphFormat.Shading.Texture;
targetPara.ParagraphFormat.Shading.BackgroundPatternColor = sourcePara.ParagraphFormat.Shading.BackgroundPatternColor;
targetPara.ParagraphFormat.Shading.ForegroundPatternColor = sourcePara.ParagraphFormat.Shading.ForegroundPatternColor;
// 复制制表位设置
targetPara.ParagraphFormat.TabStops.Clear();
foreach (TabStop tabStop in sourcePara.ParagraphFormat.TabStops)
{
targetPara.ParagraphFormat.TabStops.Add(tabStop.Clone());
}
}
public void FindAndReplaceParagraphContent(Document doc, string findText, string replaceText, ParagraphFormat newFormat = null)
{
foreach (Paragraph para in doc.GetChildNodes(NodeType.Paragraph, true))
{
if (para.GetText().Contains(findText))
{
// 替换文本
string paraText = para.GetText().Replace(findText, replaceText);
para.RemoveAllChildren();
para.AppendChild(new Run(doc, paraText.Trim('\r')));
// 应用新格式
if (newFormat != null)
{
para.ParagraphFormat.Alignment = newFormat.Alignment;
para.ParagraphFormat.LeftIndent = newFormat.LeftIndent;
para.ParagraphFormat.RightIndent = newFormat.RightIndent;
// ... 其他格式属性
}
}
}
}
public class TechnicalDocumentGenerator
{
private Document doc;
private DocumentBuilder builder;
public TechnicalDocumentGenerator()
{
doc = new Document();
builder = new DocumentBuilder(doc);
InitializeStyles();
}
private void InitializeStyles()
{
// 创建标题1样式
Style heading1 = doc.Styles.Add(StyleType.Paragraph, "TechHeading1");
heading1.Font.Name = "微软雅黑";
heading1.Font.Size = 18;
heading1.Font.Bold = true;
heading1.Font.Color = Color.DarkBlue;
heading1.ParagraphFormat.SpaceBefore = 24;
heading1.ParagraphFormat.SpaceAfter = 12;
heading1.ParagraphFormat.Borders.Bottom.LineStyle = LineStyle.Single;
heading1.ParagraphFormat.Borders.Bottom.Color = Color.DarkBlue;
// 创建标题2样式
Style heading2 = doc.Styles.Add(StyleType.Paragraph, "TechHeading2");
heading2.Font.Name = "微软雅黑";
heading2.Font.Size = 14;
heading2.Font.Bold = true;
heading2.Font.Color = Color.DarkGreen;
heading2.ParagraphFormat.SpaceBefore = 18;
heading2.ParagraphFormat.SpaceAfter = 10;
heading2.ParagraphFormat.LeftIndent = 12;
// 创建代码块样式
Style codeBlock = doc.Styles.Add(StyleType.Paragraph, "CodeBlock");
codeBlock.Font.Name = "Consolas";
codeBlock.Font.Size = 10;
codeBlock.ParagraphFormat.LeftIndent = 24;
codeBlock.ParagraphFormat.Shading.BackgroundPatternColor = Color.LightGray;
codeBlock.ParagraphFormat.Borders.LineStyle = LineStyle.Single;
codeBlock.ParagraphFormat.Borders.Color = Color.Gray;
codeBlock.ParagraphFormat.Borders.DistanceFromText = 4;
// 创建注意事项样式
Style noteStyle = doc.Styles.Add(StyleType.Paragraph, "Note");
noteStyle.Font.Name = "微软雅黑";
noteStyle.Font.Size = 11;
noteStyle.ParagraphFormat.LeftIndent = 36;
noteStyle.ParagraphFormat.RightIndent = 36;
noteStyle.ParagraphFormat.Shading.BackgroundPatternColor = Color.LightYellow;
noteStyle.ParagraphFormat.Borders.Left.LineStyle = LineStyle.Single;
noteStyle.ParagraphFormat.Borders.Left.LineWidth = 4;
noteStyle.ParagraphFormat.Borders.Left.Color = Color.Orange;
noteStyle.ParagraphFormat.Borders.DistanceFromText = 8;
}
public void AddHeading1(string text)
{
builder.ParagraphFormat.StyleName = "TechHeading1";
builder.Writeln(text);
ResetFormat();
}
public void AddHeading2(string text)
{
builder.ParagraphFormat.StyleName = "TechHeading2";
builder.Writeln(text);
ResetFormat();
}
public void AddParagraph(string text, ParagraphAlignment alignment = ParagraphAlignment.Left)
{
builder.ParagraphFormat.Alignment = alignment;
builder.ParagraphFormat.LineSpacing = 18;
builder.ParagraphFormat.SpaceAfter = 8;
builder.Writeln(text);
ResetFormat();
}
public void AddCodeBlock(string code)
{
builder.ParagraphFormat.StyleName = "CodeBlock";
builder.Writeln(code);
ResetFormat();
}
public void AddNote(string text)
{
builder.ParagraphFormat.StyleName = "Note";
builder.Write("注意:");
builder.Font.Bold = false;
builder.Writeln(text);
ResetFormat();
}
public void AddBulletList(params string[] items)
{
builder.ListFormat.ApplyBulletDefault();
foreach (string item in items)
{
builder.Writeln(item);
}
builder.ListFormat.RemoveNumbers();
ResetFormat();
}
public void AddNumberedList(params string[] items)
{
builder.ListFormat.ApplyNumberDefault();
foreach (string item in items)
{
builder.Writeln(item);
}
builder.ListFormat.RemoveNumbers();
ResetFormat();
}
public void AddTable(string[] headers, string[,] data)
{
// 创建简单的制表位表格
double[] positions = new double[headers.Length];
for (int i = 0; i < headers.Length; i++)
{
positions[i] = (i + 1) * 120;
}
TabStopCollection tabStops = builder.ParagraphFormat.TabStops;
tabStops.Clear();
for (int i = 0; i < positions.Length; i++)
{
tabStops.Add(new TabStop(positions[i], TabAlignment.Left,
i == positions.Length - 1 ? TabLeader.None : TabLeader.Dots));
}
// 添加表头
builder.Font.Bold = true;
for (int i = 0; i < headers.Length; i++)
{
if (i > 0) builder.Write("\t");
builder.Write(headers[i]);
}
builder.Writeln();
// 添加分隔线
for (int i = 0; i < headers.Length; i++)
{
if (i > 0) builder.Write("\t");
builder.Write(new string('-', headers[i].Length));
}
builder.Writeln();
// 添加数据行
builder.Font.Bold = false;
for (int row = 0; row < data.GetLength(0); row++)
{
for (int col = 0; col < data.GetLength(1); col++)
{
if (col > 0) builder.Write("\t");
builder.Write(data[row, col]);
}
builder.Writeln();
}
tabStops.Clear();
ResetFormat();
}
private void ResetFormat()
{
builder.ParagraphFormat.ClearFormatting();
builder.Font.ClearFormatting();
}
public void Save(string fileName)
{
doc.Save(fileName);
}
public Document GetDocument()
{
return doc;
}
}
// 使用示例
public void CreateTechnicalDocument()
{
TechnicalDocumentGenerator generator = new TechnicalDocumentGenerator();
// 添加标题
generator.AddHeading1("Aspose.Words 段落操作指南");
// 添加概述
generator.AddHeading2("概述");
generator.AddParagraph("本文档介绍如何使用Aspose.Words进行各种段落操作,包括格式设置、对齐、列表等。");
// 添加注意事项
generator.AddNote("在进行段落操作时,建议先备份原始文档。");
// 添加代码示例
generator.AddHeading2("基础示例");
generator.AddCodeBlock(@"Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;
builder.Writeln(""居中段落"");");
// 添加列表
generator.AddHeading2("主要功能");
generator.AddBulletList(
"段落创建与格式设置",
"对齐与缩进控制",
"行间距和段间距调整",
"边框和底纹设置",
"制表位管理"
);
// 添加表格
generator.AddHeading2("格式对比");
string[] headers = { "属性", "默认值", "推荐值" };
string[,] data = {
{ "行间距", "单倍", "1.15倍" },
{ "段后距", "0磅", "6磅" },
{ "首行缩进", "0磅", "24磅" }
};
generator.AddTable(headers, data);
generator.Save("技术文档示例.docx");
}
public void OptimizedBatchFormatting(Document doc, List<int> paragraphIndices, ParagraphFormat format)
{
// 获取所有段落一次,避免重复查询
NodeCollection paragraphs = doc.GetChildNodes(NodeType.Paragraph, true);
// 批量应用格式,减少单独操作
foreach (int index in paragraphIndices)
{
if (index < paragraphs.Count)
{
Paragraph para = (Paragraph)paragraphs[index];
// 直接复制格式对象,避免逐属性设置
para.ParagraphFormat.CopyFormat(format);
}
}
}
public void MemoryOptimizedParagraphProcessing(string inputFile, string outputFile)
{
using (Document doc = new Document(inputFile))
{
// 使用局部变量避免长期引用
foreach (Section section in doc.Sections)
{
ProcessSectionParagraphs(section);
// 可以考虑在这里进行垃圾回收
if (section.Body.Paragraphs.Count > 1000)
{
GC.Collect();
}
}
doc.Save(outputFile);
} // Document在此处自动释放
}
private void ProcessSectionParagraphs(Section section)
{
foreach (Paragraph para in section.Body.Paragraphs)
{
// 处理段落
OptimizeParagraphFormat(para);
}
}
public class ParagraphOperationHandler
{
public static void SafeApplyFormat(Paragraph paragraph, Action<ParagraphFormat> formatAction)
{
try
{
if (paragraph?.ParagraphFormat != null)
{
formatAction(paragraph.ParagraphFormat);
}
}
catch (ArgumentException ex)
{
Console.WriteLine($"格式参数错误: {ex.Message}");
}
catch (InvalidOperationException ex)
{
Console.WriteLine($"操作无效: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"未知错误: {ex.Message}");
}
}
public static bool ValidateParagraphFormat(ParagraphFormat format)
{
// 验证缩进值
if (format.LeftIndent < 0 || format.RightIndent < 0)
{
Console.WriteLine("缩进值不能为负数");
return false;
}
// 验证行间距
if (format.LineSpacingRule == LineSpacingRule.Exactly && format.LineSpacing <= 0)
{
Console.WriteLine("固定行距值必须大于0");
return false;
}
// 验证间距值
if (format.SpaceBefore < 0 || format.SpaceAfter < 0)
{
Console.WriteLine("段落间距不能为负数");
return false;
}
return true;
}
}
本教程详细介绍了Aspose.Words for .NET中段落操作的各个方面,包括:
Aspose.Words for .NET下载地址 https://soft51.cc/software/175811283999782847