丰江 发表于 2025-10-6 10:40:47

.NET操作Word/WPS打造专业文档 - 页面设置与打印控制完全指南

本文将详细介绍如何使用MudTools.OfficeInterop.Word库来设置页面参数、管理页眉页脚以及控制文档打印。我们将深入探讨从基础的纸张设置到高级的分节页面控制,从简单的页眉页脚到复杂的多区域布局,以及如何精确控制文档的打印输出。最后,我们将通过一个实战示例,创建一个具有专业格式的文档模板,并演示如何进行打印设置,让你真正掌握Word自动化处理的精髓。
开源项目地址:https://gitee.com/mudtools/OfficeInterop
项目官方网址:MudTools OfficeInterop
页面设置 (PageSetup Object)

页面设置是文档格式化的重要组成部分,它决定了文档在纸张上的布局方式。通过IWordPageSetup接口,我们可以控制页面的各个方面,包括纸张大小、方向、页边距等。
想要创建出专业、美观的文档,第一步就是要掌握页面设置。无论是制作商务报告、学术论文还是其他类型的文档,合适的页面布局都是成功的关键。
设置纸张大小、方向、页边距

在Word文档处理中,最常见的页面设置需求是调整纸张大小、方向和页边距。这些设置直接影响文档的外观和可读性。
using MudTools.OfficeInterop;
using MudTools.OfficeInterop.Word;
using System;

// 创建或打开文档
using var wordApp = WordFactory.BlankWorkbook();
var document = wordApp.ActiveDocument;

// 获取页面设置对象
var pageSetup = document.Sections.PageSetup;

// 设置纸张大小为A4
pageSetup.PaperSize = WdPaperSize.wdPaperA4;

// 设置页面方向为横向
pageSetup.Orientation = WdOrientation.wdOrientLandscape;

// 设置页边距(单位:磅)
pageSetup.TopMargin = 72;   // 1英寸 = 72磅
pageSetup.BottomMargin = 72;
pageSetup.LeftMargin = 72;
pageSetup.RightMargin = 72;

// 或者使用页面宽度和高度直接设置(单位:磅)
pageSetup.PageWidth = 595;    // A4纸宽度
pageSetup.PageHeight = 842;   // A4纸高度应用场景:创建标准化报告模板

在企业环境中,通常需要创建符合公司标准的报告模板。这些模板需要遵循特定的页面设置规范。
using MudTools.OfficeInterop;
using MudTools.OfficeInterop.Word;
using System;

// 报告模板生成器
public class ReportTemplateGenerator
{
    /// <summary>
    /// 创建标准化报告模板
    /// </summary>
    /// <param name="templateName">模板名称</param>
    /// <param name="paperSize">纸张大小</param>
    /// <param name="isLandscape">是否横向</param>
    public void CreateStandardReportTemplate(string templateName, WdPaperSize paperSize, bool isLandscape = false)
    {
      try
      {
            // 创建新文档
            using var wordApp = WordFactory.BlankWorkbook();
            var document = wordApp.ActiveDocument;
            
            // 隐藏Word应用程序以提高性能
            wordApp.Visibility = WordAppVisibility.Hidden;
            wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
            
            // 遍历所有节并设置页面格式
            foreach (IWordSection section in document.Sections)
            {
                var pageSetup = section.PageSetup;
               
                // 设置纸张大小
                pageSetup.PaperSize = paperSize;
               
                // 设置页面方向
                pageSetup.Orientation = isLandscape ?
                  WdOrientation.wdOrientLandscape :
                  WdOrientation.wdOrientPortrait;
               
                // 设置标准页边距(上下1英寸,左右1.25英寸)
                pageSetup.TopMargin = 72;      // 1英寸
                pageSetup.BottomMargin = 72;
                pageSetup.LeftMargin = 90;   // 1.25英寸
                pageSetup.RightMargin = 90;
               
                // 设置装订线(如果需要)
                pageSetup.Gutter = 36;         // 0.5英寸装订线
                pageSetup.GutterPos = WdGutterStyle.wdGutterPosLeft;
            }
            
            // 保存为模板文件
            string outputPath = $@"C:\Templates\{templateName}.dotx";
            document.SaveAs(outputPath, WdSaveFormat.wdFormatXMLTemplate);
            document.Close();
            
            Console.WriteLine($"标准化报告模板已创建: {outputPath}");
      }
      catch (Exception ex)
      {
            Console.WriteLine($"创建报告模板时发生错误: {ex.Message}");
      }
    }
   
    /// <summary>
    /// 为现有文档应用标准页面设置
    /// </summary>
    /// <param name="documentPath">文档路径</param>
    public void ApplyStandardPageSetup(string documentPath)
    {
      try
      {
            // 打开现有文档
            using var wordApp = WordFactory.Open(documentPath);
            var document = wordApp.ActiveDocument;
            
            // 隐藏Word应用程序以提高性能
            wordApp.Visibility = WordAppVisibility.Hidden;
            wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
            
            // 应用标准页面设置
            foreach (IWordSection section in document.Sections)
            {
                var pageSetup = section.PageSetup;
               
                // 设置为A4纸张
                pageSetup.PaperSize = WdPaperSize.wdPaperA4;
               
                // 设置纵向
                pageSetup.Orientation = WdOrientation.wdOrientPortrait;
               
                // 设置标准页边距
                pageSetup.TopMargin = 72;
                pageSetup.BottomMargin = 72;
                pageSetup.LeftMargin = 90;
                pageSetup.RightMargin = 90;
            }
            
            // 保存文档
            document.Save();
            document.Close();
            
            Console.WriteLine($"已为文档应用标准页面设置: {documentPath}");
      }
      catch (Exception ex)
      {
            Console.WriteLine($"应用页面设置时发生错误: {ex.Message}");
      }
    }
}高级页面设置选项

除了基本的页面设置外,IWordPageSetup还提供了更多高级选项,如文本列、行号、装订线等。
// 获取页面设置对象
var pageSetup = document.Sections.PageSetup;

// 设置文本列
pageSetup.TextColumns.SetCount(2); // 设置为两列
pageSetup.TextColumns.Width = 200; // 设置列宽
pageSetup.TextColumns.Spacing = 30; // 设置列间距

// 设置行号
pageSetup.LineNumbering.Active = true; // 启用行号
pageSetup.LineNumbering.RestartMode = WdNumberingRule.wdRestartContinuous; // 连续编号
pageSetup.LineNumbering.DistanceFromText = 36; // 行号与文本距离

// 设置装订线
pageSetup.Gutter = 36; // 0.5英寸装订线
pageSetup.GutterStyle = WdGutterStyleOld.wdGutterStyleLatin; // 装订线样式
pageSetup.GutterPos = WdGutterStyle.wdGutterPosLeft; // 装订线位置应用场景:创建学术论文模板

学术论文通常有特定的格式要求,包括多列布局、行号等。
// 学术论文模板生成器
public class AcademicPaperTemplateGenerator
{
    /// <summary>
    /// 创建学术论文模板
    /// </summary>
    /// <param name="templatePath">模板保存路径</param>
    public void CreateAcademicPaperTemplate(string templatePath)
    {
      try
      {
            // 创建新文档
            using var wordApp = WordFactory.BlankWorkbook();
            var document = wordApp.ActiveDocument;
            
            // 隐藏Word应用程序以提高性能
            wordApp.Visibility = WordAppVisibility.Hidden;
            wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
            
            // 设置整体页面格式
            var pageSetup = document.Sections.PageSetup;
            
            // A4纸张,纵向
            pageSetup.PaperSize = WdPaperSize.wdPaperA4;
            pageSetup.Orientation = WdOrientation.wdOrientPortrait;
            
            // 设置页边距
            pageSetup.TopMargin = 72;      // 1英寸
            pageSetup.BottomMargin = 72;
            pageSetup.LeftMargin = 72;
            pageSetup.RightMargin = 72;
            
            // 为正文部分设置两列布局(通常用于摘要后的内容)
            // 这里我们为第二节设置两列(假设第一节是标题和摘要)
            if (document.Sections.Count > 1)
            {
                var bodyPageSetup = document.Sections.PageSetup;
                bodyPageSetup.TextColumns.SetCount(2); // 两列
                bodyPageSetup.TextColumns.EvenlySpaced = true;
                bodyPageSetup.TextColumns.LineBetween = true; // 显示分隔线
            }
            
            // 为特定节启用行号(如用于审稿的版本)
            var reviewPageSetup = document.Sections.PageSetup;
            reviewPageSetup.LineNumbering.Active = true;
            reviewPageSetup.LineNumbering.RestartMode = WdNumberingRule.wdRestartContinuous;
            reviewPageSetup.LineNumbering.DistanceFromText = 18; // 1/4英寸
            
            // 保存模板
            document.SaveAs(templatePath, WdSaveFormat.wdFormatXMLTemplate);
            document.Close();
            
            Console.WriteLine($"学术论文模板已创建: {templatePath}");
      }
      catch (Exception ex)
      {
            Console.WriteLine($"创建学术论文模板时发生错误: {ex.Message}");
      }
    }
}页眉与页脚 (HeadersFooters Collection)

页眉和页脚是文档中重要的组成部分,它们通常包含页码、文档标题、日期等信息。通过IWordHeadersFooters和IWordHeaderFooter接口,我们可以灵活地控制每个节的页眉页脚。
专业的文档不仅内容要精彩,外观也要精致。页眉页脚就像文档的"名片",不仅提供导航信息,还能增强文档的专业性和一致性。通过巧妙地设计页眉页脚,你可以让文档在众多普通文档中脱颖而出。
为不同节设置不同的页眉页脚

在复杂文档中,可能需要为不同节设置不同的页眉页脚。这在章节结构复杂的文档中非常有用。
using MudTools.OfficeInterop;
using MudTools.OfficeInterop.Word;
using System;

// 打开或创建文档
using var wordApp = WordFactory.BlankWorkbook();
var document = wordApp.ActiveDocument;

// 为第一节设置页眉页脚
var firstSection = document.Sections;

// 设置首页不同页眉页脚
firstSection.PageSetup.DifferentFirstPageHeaderFooter = 1; // 1表示启用

// 设置奇偶页不同页眉页脚
firstSection.PageSetup.OddAndEvenPagesHeaderFooter = 1; // 1表示启用

// 设置首页页眉
var firstHeader = firstSection.Headers;
firstHeader.Range.Text = "这是首页页眉\n";

// 设置奇数页页眉
var oddHeader = firstSection.Headers;
oddHeader.Range.Text = "这是奇数页页眉\n";

// 设置偶数页页眉
var evenHeader = firstSection.Headers;
evenHeader.Range.Text = "这是偶数页页眉\n";

// 设置页脚(所有页相同)
foreach (IWordSection section in document.Sections)
{
    var footer = section.Footers;
    footer.Range.Text = "这是页脚内容\n";
}应用场景:创建多章节技术文档

技术文档通常包含多个章节,每个章节可能需要不同的页眉信息。
// 技术文档页眉页脚管理器
public class TechnicalDocumentHeaderFooterManager
{
    /// <summary>
    /// 为技术文档设置页眉页脚
    /// </summary>
    /// <param name="document">Word文档</param>
    /// <param name="documentTitle">文档标题</param>
    public void SetupTechnicalDocumentHeadersFooters(IWordDocument document, string documentTitle)
    {
      try
      {
            // 为所有节设置首页不同
            foreach (IWordSection section in document.Sections)
            {
                section.PageSetup.DifferentFirstPageHeaderFooter = 1;
            }
            
            // 设置首页页眉(通常是文档标题)
            var firstSection = document.Sections;
            var firstHeader = firstSection.Headers;
            firstHeader.Range.Text = documentTitle;
            firstHeader.Range.Font.Name = "微软雅黑";
            firstHeader.Range.Font.Size = 16;
            firstHeader.Range.Font.Bold = true;
            firstHeader.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
            
            // 为各节设置页眉(显示章节标题)
            for (int i = 1; i <= document.Sections.Count; i++)
            {
                var section = document.Sections;
                var header = section.Headers;
               
                // 根据节号设置不同的页眉内容
                switch (i)
                {
                  case 1:
                        header.Range.Text = "引言";
                        break;
                  case 2:
                        header.Range.Text = "系统架构";
                        break;
                  case 3:
                        header.Range.Text = "详细设计";
                        break;
                  case 4:
                        header.Range.Text = "实施指南";
                        break;
                  default:
                        header.Range.Text = $"第{i}章";
                        break;
                }
               
                // 格式化页眉
                header.Range.Font.Name = "微软雅黑";
                header.Range.Font.Size = 10;
                header.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
            }
            
            // 设置页脚(显示页码)
            foreach (IWordSection section in document.Sections)
            {
                var footer = section.Footers;
               
                // 插入页码
                footer.Range.Text = "第 ";
                footer.Range.Font.Name = "微软雅黑";
                footer.Range.Font.Size = 9;
               
                // 添加页码域
                var pageNumRange = footer.Range.Duplicate;
                pageNumRange.Collapse(WdCollapseDirection.wdCollapseEnd);
                pageNumRange.Fields.Add(pageNumRange, WdFieldType.wdFieldPage);
               
                var totalPagesRange = footer.Range.Duplicate;
                totalPagesRange.Collapse(WdCollapseDirection.wdCollapseEnd);
                totalPagesRange.Text = " 页,共 ";
                totalPagesRange.Fields.Add(totalPagesRange, WdFieldType.wdFieldNumPages);
                totalPagesRange.Text += " 页";
               
                // 设置页脚居中对齐
                footer.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
            }
      }
      catch (Exception ex)
      {
            Console.WriteLine($"设置页眉页脚时发生错误: {ex.Message}");
      }
    }
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

瘴锲如 发表于 2025-10-27 00:55:12

感谢分享

全阳霁 发表于 2025-11-27 14:04:50

这个好,看起来很实用

打阗渖 发表于 2025-12-5 11:51:19

感谢分享,下载保存了,貌似很强大

端木茵茵 发表于 前天 14:30

用心讨论,共获提升!
页: [1]
查看完整版本: .NET操作Word/WPS打造专业文档 - 页面设置与打印控制完全指南