在开发涉及文档生成的业务系统时,常常需要根据数据动态创建 word 报告,并针对不同场景设置页面布局,如页面大小(a4/a3)、方向(纵向/横向)、页边距等。手动调整大量文档不仅耗时,且易出错,因此自动化页面设置成为关键需求。
本文基于 free spire.doc for .net 免费库,介绍如何通过 c# 代码实现对 word 文档页面的灵活控制,包括设置页面尺寸、方向、边距,以及在同一文档中使用多个不同布局的节(section),希望能为有排版需求的开发者提供参考。
准备工作:装上 nuget 包
在 visual studio 里新建一个 .net 控制台项目(或者 asp.net core 项目也行),然后通过 nuget 安装:
install-package freespire.doc
安装完后,在代码文件开头加上:
using spire.doc; using spire.doc.documents;
基本操作:创建文档和节(section)
word 文档的结构是:document → section → 段落/表格等。页面设置是针对每个 section 的,所以要先拿到 section 对象。
// 创建 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 点
用法很简单:
// 设置为 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 属性:
// 纵向 section.pagesetup.orientation = pageorientation.portrait; // 横向 section.pagesetup.orientation = pageorientation.landscape;
注意:当你设置方向为横向时,最好先设置页面大小。因为如果先设置横向再设置页面大小,页面大小可能会被重置(取决于内部实现),因此建议先 pagesize 再 orientation。
设置页边距:上、下、左、右
页边距也是通过 pagesetup 来设置,单位同样是点:
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 厘米,并添加一段文字说明:
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 可以独立设置页面布局。
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 厘米。所以我一般先定义几个常量:
const 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)」,需注意与厘米 / 毫米的转换。多节文档需遍历每个节单独配置,确保所有页面格式统一或按需差异化。
到此这篇关于c#代码实现设置word文档页面(页面大小、边距、方向)的文章就介绍到这了,更多相关c#设置word页面内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论