在自动生成或批量整理 Word 文档时,段落对齐往往是最先影响阅读体验的一项格式设置。本文用 Free Spire.Doc for .NET 为例,梳理 C# 中设置段落左对齐、居中、右对齐和两端对齐的基本方法,并结合新建文档与修改现有文档两个场景,帮助你快速判断该用哪种写法、哪些地方需要额外留意。
先安装 Free Spire.Doc
Free Spire.Doc 提供 NuGet 包安装方式,集成起来比较直接。
- 方式 1:在 Visual Studio 的“NuGet 包管理器”中搜索
FreeSpire.Doc,选择对应版本安装; - 方式 2:在包管理器控制台执行安装命令:
Install-Package FreeSpire.Doc
`HorizontalAlignment` 枚举怎么选
Free Spire.Doc 通过 HorizontalAlignment 枚举定义 Word 段落的对齐方式,含义与 Word 中常见的原生对齐样式一致。实际使用时,关键不是记住枚举名,而是把它和文档场景对应起来。

| 枚举值 | 对齐样式 | 适用场景 |
|---|---|---|
| Left | 左对齐 | 正文文本(默认样式) |
| Center | 居中对齐 | 标题、副标题、居中强调文本 |
| Right | 右对齐 | 页码、落款、日期等 |
| Justify | 两端对齐 | 长文本正文,提升排版整齐度 |
| Distribute | 分散对齐 | 少量文本填充整行(需 Word 支持) |
如果只是处理普通正文,通常优先考虑 Left 或 Justify;如果是标题、页码、落款这类结构化内容,再分别使用 Center 和 Right 会更合适。
新建文档时设置不同段落对齐
如果文档由程序生成,最稳妥的做法是在创建每个段落时就直接指定对齐方式。这样可以避免后续再做二次遍历,也更容易维护模板逻辑。
示例:创建空白 Word 并写入不同对齐段落
using Spire.Doc;
using Spire.Doc.Documents;
using System.IO;
namespace SetWordParagraphAlignment
{
class Program
{
static void Main(string[] args)
{
// 1. 创建Document实例(代表整个Word文档)
Document doc = new Document();
// 2. 添加节(Word文档的基本结构单元,一个文档可包含多个节)
Section section = doc.AddSection();
// 3. 段落1:左对齐(默认样式,显式设置更清晰)
Paragraph para1 = section.AddParagraph();
para1.AppendText("这是左对齐的段落(默认样式)。左对齐是文档正文最常用的对齐方式,符合大多数人的阅读习惯。");
para1.Format.HorizontalAlignment = HorizontalAlignment.Left; // 显式设置左对齐
// 4. 段落2:居中对齐
Paragraph para2 = section.AddParagraph();
para2.AppendText("这是居中对齐的段落");
para2.Format.HorizontalAlignment = HorizontalAlignment.Center; // 居中对齐
// 5. 段落3:右对齐
Paragraph para3 = section.AddParagraph();
para3.AppendText("这是右对齐的段落(适用于页码、日期等场景)");
para3.Format.HorizontalAlignment = HorizontalAlignment.Right; // 右对齐
// 6. 段落4:两端对齐
Paragraph para4 = section.AddParagraph();
para4.AppendText("这是两端对齐的段落。两端对齐会让文本的左右两端均对齐到页面边缘,消除文本行两端的不规则空白,使长文本排版更整齐,是正式文档正文的常用样式。");
para4.Format.HorizontalAlignment = HorizontalAlignment.Justify; // 两端对齐
// 7. 保存文档(支持Docx、Doc、PDF等格式)
string outputPath = "NewDocument_ParagraphAlignment.docx";
doc.SaveToFile(outputPath, FileFormat.Docx2013);
// 8. 释放资源(避免内存泄漏)
doc.Dispose();
}
}
}
这个示例里最值得注意的几点
Document代表整个 Word 文档,Section是文档结构中的节;- 每次调用
section.AddParagraph()都会新增一个段落; - 真正控制段落对齐的是
para.Format.HorizontalAlignment; - 保存时示例使用的是
FileFormat.Docx2013,输出文件名为NewDocument_ParagraphAlignment.docx; - 处理完成后要调用
doc.Dispose()释放资源。
修改现有 Word 文档的段落对齐
如果你的需求不是生成新文档,而是接手一份已有的 .docx 文件做格式整理,那么常见做法是先加载文档,再遍历节和段落,按规则批量修改。

示例:遍历段落并按内容调整对齐方式
using Spire.Doc;
using Spire.Doc.Documents;
namespace ModifyExistingWordAlignment
{
class Program
{
static void Main(string[] args)
{
// 1. 加载现有Word文档(需替换为实际文件路径)
string inputPath = "ExistingDocument.docx";
Document doc = new Document();
doc.LoadFromFile(inputPath);
// 2. 遍历所有节和段落,修改对齐样式
foreach (Section section in doc.Sections)
{
foreach (Paragraph para in section.Paragraphs)
{
// 2.1 批量修改:所有段落默认设为两端对齐
para.Format.HorizontalAlignment = HorizontalAlignment.Justify;
// 2.2 精准修改:包含“标题”的段落设为居中对齐
if (!string.IsNullOrEmpty(para.Text) && para.Text.Contains("标题"))
{
para.Format.HorizontalAlignment = HorizontalAlignment.Center;
}
// 2.3 拓展:包含“落款”的段落设为右对齐
if (!string.IsNullOrEmpty(para.Text) && para.Text.Contains("落款"))
{
para.Format.HorizontalAlignment = HorizontalAlignment.Right;
}
}
}
// 3. 保存修改后的文档(避免覆盖原文件,建议重命名)
string outputPath = "ModifiedDocument_ParagraphAlignment.docx";
doc.SaveToFile(outputPath, FileFormat.Docx2013);
// 4. 释放资源
doc.Dispose();
}
}
}
这段批量修改逻辑适合什么场景
这类写法适合已有文档格式不统一、但文本内容具备一定规律的场景。例如:
- 先统一把正文段落设为
HorizontalAlignment.Justify; - 再把包含“标题”的段落改成
HorizontalAlignment.Center; - 最后把包含“落款”的段落改成
HorizontalAlignment.Right。
这种“先批量统一,再按关键词覆盖”的顺序很常见,也便于继续扩展更多条件,例如日期、署名、章节名等特殊段落。
使用时要注意的限制和细节
- 免费版限制:Free Spire.Doc 免费版对处理的文档有篇幅限制,单文档最多处理
500个段落、25个表格; - 资源释放:操作完成后必须调用
doc.Dispose()释放Document对象,否则可能导致内存泄漏,尤其是在循环处理多个文档时; - 枚举兼容性:
Distribute(分散对齐)仅在 Word 2013 及以上版本支持,低版本 Word 打开时可能显示异常; - 空段落处理:遍历段落时建议先判断
para.Text是否为空,避免对空段落进行无效匹配; - 格式覆盖:修改段落对齐样式会覆盖原有对齐设置,如果需要保留部分格式,应该先加条件判断再修改。
总结
用 Free Spire.Doc for .NET 设置 Word 段落对齐并不复杂,核心就是围绕 para.Format.HorizontalAlignment 来操作。新建文档时可以在写入段落的同时直接指定对齐方式;修改现有文档时,则更适合通过遍历段落加条件判断来做批量整理。只要同时注意免费版篇幅限制、`Distribute` 的兼容性以及 `doc.Dispose()` 的资源释放,这套方案就足以覆盖大多数基础排版自动化需求。










