在开发涉及文档生成的业务系统时,常常需要根据数据动态创建 Word 报告,并针对不同场景设置页面布局,如页面大小(A4/A3)、方向(纵向/横向)、页边距等。手动调整大量文档不仅耗时,且易出错,因此自动化页面设置成为关键需求。
本文基于 Free Spire.Doc for .NET 免费库,介绍如何通过 C# 代码实现对 Word 文档页面的灵活控制,包括设置页面尺寸、方向、边距,以及在同一文档中使用多个不同布局的节(Section),希望能为有排版需求的开发者提供参考。
准备工作:装上 NuGet 包
在 Visual Studio 里新建一个 .NET 控制台项目(或者 ASP.NET Core 项目也行),然后通过 NuGet 安装:
Install-Package FreeSpire.Doc
安装完后,在代码文件开头加上:
csharp
using Spire.Doc;
using Spire.Doc.Documents;
基本操作:创建文档和节(Section)
Word 文档的结构是:Document → Section → 段落/表格等 。页面设置是针对每个 Section 的,所以要先拿到 Section 对象。
csharp
// 创建 Document 对象
Document document = new Document();
// 添加一个节(Section)
Section section = document.AddSection();
如果你不手动添加 Section,document 默认也会自带一个,但显式添加更清晰。
设置页面大小:A4、A3、Letter 还是自定义?
页面大小可以通过 PageSetup.PageSize 来设置。PageSize 是一个 SizeF 结构,单位是点(point),1 英寸 = 72 点。Free Spire.Doc 提供了几个预定义的页面大小常量,比如:
PageSize.A4:宽 595 点,高 842 点(对应 210mm × 297mm)PageSize.Letter:宽 612 点,高 792 点PageSize.A3:宽 842 点,高 1191 点
用法很简单:
csharp
// 设置为 A4
section.PageSetup.PageSize = PageSize.A4;
// 如果要自定义大小,比如 10cm × 15cm(需要换算成点)
float width = 10 * 72 / 2.54f; // 10 厘米转英寸再转点
float height = 15 * 72 / 2.54f;
section.PageSetup.PageSize = new SizeF(width, height);
自定义尺寸:

如果你需要精确的毫米/厘米,记得用
厘米数 * 72 / 2.54这个公式,切记单位是点。
设置页面方向:纵向还是横向?
方向设置很简单,通过 PageSetup.Orientation 属性:
csharp
// 纵向
section.PageSetup.Orientation = PageOrientation.Portrait;
// 横向
section.PageSetup.Orientation = PageOrientation.Landscape;
注意 :当你设置方向为横向时,最好先设置页面大小 。因为如果先设置横向再设置页面大小,页面大小可能会被重置(取决于内部实现),因此建议先
PageSize再Orientation。
设置页边距:上、下、左、右
页边距也是通过 PageSetup 来设置,单位同样是点:
csharp
section.PageSetup.Margins.Top = 72f; // 上边距 1 英寸
section.PageSetup.Margins.Bottom = 72f; // 下边距 1 英寸
section.PageSetup.Margins.Left = 90f; // 左边距 1.25 英寸(方便装订)
section.PageSetup.Margins.Right = 72f; // 右边距 1 英寸
当然也可以用厘米换算,比如设置 2.54cm 边距:2.54 * 72 / 2.54 = 72,正好 1 英寸。

完整示例:动态生成一个横向 A3 文档
下面是一个完整的小例子,创建一个横向的 A3 文档,页边距上下左右都是 1 厘米,并添加一段文字说明:
csharp
using Spire.Doc;
using Spire.Doc.Documents;
using System.Drawing;
class Program
{
static void Main(string[] args)
{
// 创建文档
Document document = new Document();
Section section = document.AddSection();
// 设置页面大小为 A3
section.PageSetup.PageSize = PageSize.A3;
// 设置方向为横向
section.PageSetup.Orientation = PageOrientation.Landscape;
// 设置页边距(1 厘米 = 28.35 点)
float marginInPoints = 28.35f; // 1cm
section.PageSetup.Margins.All = marginInPoints; // 或者分别设置 Top/Bottom/Left/Right
// 添加一个段落
Paragraph para = section.AddParagraph();
para.AppendText("这是一个横向的 A3 文档,页边距均为 1 厘米。");
para.ApplyStyle(BuiltinStyle.Heading1);
// 保存文档
document.SaveToFile("TestA3.docx", FileFormat.Docx);
System.Diagnostics.Process.Start("TestA3.docx"); // 打开看看效果
}
}
运行之后,生成的 Word 文档就会按我们的要求排版。

进阶:不同节设置不同页面
有时候一个文档里需要既有纵向页面,又有横向页面(比如报告里夹一张大表格)。这时候可以用多个 Section,每个 Section 可以独立设置页面布局。
csharp
Document document = new Document();
// 第一节:纵向 A4
Section section1 = document.AddSection();
section1.PageSetup.PageSize = PageSize.A4;
section1.PageSetup.Orientation = PageOrientation.Portrait;
section1.AddParagraph().AppendText("这是纵向 A4 页面的内容。");
// 第二节:横向 A3
Section section2 = document.AddSection();
section2.PageSetup.PageSize = PageSize.A3;
section2.PageSetup.Orientation = PageOrientation.Landscape;
section2.AddParagraph().AppendText("这是横向 A3 页面的内容。");
document.SaveToFile("MultiSection.docx", FileFormat.Docx);
这样生成的 Word 文档里,第一节是纵向 A4,第二节会自动另起一页并变成横向 A3。这个特性在生成复杂报告时特别有用。

注意事项
-
单位问题 :所有尺寸都是点(point),不是像素,也不是厘米/毫米。换算公式:1 英寸 = 72 点 = 2.54 厘米。所以我一般先定义几个常量:
csharpconst float PointsPerInch = 72; const float CmPerInch = 2.54f; // 厘米转点 float CmToPoints(float cm) => cm * PointsPerInch / CmPerInch; -
页边距设置顺序 :如果同时设置了
PageSize和Margins,顺序无所谓。但如果你先设置Margins再设置PageSize,Margins的值不会因为页面大小改变而自动调整,所以放心。 -
免费版的限制:Free Spire.Doc 有少量限制(比如最多 500 个段落、表格等),但一般日常使用足够了。
-
保存格式 :用
SaveToFile时最好明确指定FileFormat.Docx,避免保存成旧版.doc导致格式丢失。
总结
通过以上简单代码,可以快速实现 Word 文档页面的自动化设置,替代手动操作,提升开发效率。页面设置的核心单位是「磅(Point)」,需注意与厘米 / 毫米的转换。多节文档需遍历每个节单独配置,确保所有页面格式统一或按需差异化。此外,还支持设置页眉页脚、页码等,具体可查看产品 API 文档。