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

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

页面设置 (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[1].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[1].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[1].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[2].PageSetup;

bodyPageSetup.TextColumns.SetCount(2); // 两列

bodyPageSetup.TextColumns.EvenlySpaced = true;

bodyPageSetup.TextColumns.LineBetween = true; // 显示分隔线

}

// 为特定节启用行号(如用于审稿的版本)

var reviewPageSetup = document.Sections[1].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[1];

// 设置首页不同页眉页脚

firstSection.PageSetup.DifferentFirstPageHeaderFooter = 1; // 1表示启用

// 设置奇偶页不同页眉页脚

firstSection.PageSetup.OddAndEvenPagesHeaderFooter = 1; // 1表示启用

// 设置首页页眉

var firstHeader = firstSection.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage];

firstHeader.Range.Text = "这是首页页眉\n";

// 设置奇数页页眉

var oddHeader = firstSection.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary];

oddHeader.Range.Text = "这是奇数页页眉\n";

// 设置偶数页页眉

var evenHeader = firstSection.Headers[WdHeaderFooterIndex.wdHeaderFooterEvenPages];

evenHeader.Range.Text = "这是偶数页页眉\n";

// 设置页脚(所有页相同)

foreach (IWordSection section in document.Sections)

{

var footer = section.Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary];

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[1];

var firstHeader = firstSection.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage];

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[i];

var header = section.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary];

// 根据节号设置不同的页眉内容

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[WdHeaderFooterIndex.wdHeaderFooterPrimary];

// 插入页码

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}");

}

}

}

在页眉页脚中插入页码、日期、公司Logo等信息

页眉页脚中经常需要包含页码、日期、图片等元素。MudTools.OfficeInterop.Word提供了相应的方法来处理这些内容。

// 为文档添加带有页码和日期的页脚

var footer = document.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary];

// 插入日期

footer.Range.Text = "创建日期: ";

footer.Range.Fields.Add(footer.Range, WdFieldType.wdFieldDate);

footer.Range.Text += " 页面: ";

// 插入当前页码

var pageRange = footer.Range.Duplicate;

pageRange.Collapse(WdCollapseDirection.wdCollapseEnd);

pageRange.Fields.Add(pageRange, WdFieldType.wdFieldPage);

// 插入总页数

pageRange.Text += " / ";

pageRange.Fields.Add(pageRange, WdFieldType.wdFieldNumPages);

// 插入公司Logo

var logoRange = footer.Range.Duplicate;

logoRange.Collapse(WdCollapseDirection.wdCollapseEnd);

var logoShape = logoRange.InlineShapes.AddPicture(@"C:\Images\CompanyLogo.png");

logoShape.Width = 100;

logoShape.Height = 30;

应用场景:创建企业文档模板

企业文档通常需要包含公司标识、页码等信息。

// 企业文档模板生成器

public class CorporateDocumentTemplateGenerator

{

/// <summary>

/// 创建企业文档模板

/// </summary>

/// <param name="templatePath">模板路径</param>

/// <param name="companyLogoPath">公司Logo路径</param>

public void CreateCorporateDocumentTemplate(string templatePath, string companyLogoPath)

{

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)

{

section.PageSetup.DifferentFirstPageHeaderFooter = 1;

}

// 设置首页页眉(包含公司Logo和文档标题)

var firstSection = document.Sections[1];

var firstHeader = firstSection.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage];

// 插入公司Logo

if (System.IO.File.Exists(companyLogoPath))

{

var logoShape = firstHeader.Range.InlineShapes.AddPicture(companyLogoPath);

logoShape.Width = 120;

logoShape.Height = 40;

}

// 添加文档标题占位符

var titleRange = firstHeader.Range.Duplicate;

titleRange.Collapse(WdCollapseDirection.wdCollapseEnd);

titleRange.Text = "\n[文档标题]\n";

titleRange.Font.Name = "微软雅黑";

titleRange.Font.Size = 18;

titleRange.Font.Bold = true;

titleRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;

// 设置普通页页眉(仅包含公司名称)

foreach (IWordSection section in document.Sections)

{

var header = section.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary];

header.Range.Text = "公司名称\n";

header.Range.Font.Name = "微软雅黑";

header.Range.Font.Size = 9;

header.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphRight;

}

// 设置页脚(包含日期和页码)

foreach (IWordSection section in document.Sections)

{

var footer = section.Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary];

// 左侧显示公司信息

footer.Range.Text = "公司名称 | 地址 | 电话\n";

footer.Range.Font.Name = "微软雅黑";

footer.Range.Font.Size = 8;

// 右侧显示日期和页码

var rightFooterRange = footer.Range.Duplicate;

rightFooterRange.Collapse(WdCollapseDirection.wdCollapseEnd);

rightFooterRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphRight;

// 插入日期

rightFooterRange.Text = "打印日期: ";

rightFooterRange.Fields.Add(rightFooterRange, WdFieldType.wdFieldDate);

rightFooterRange.Text += " 第 ";

// 插入页码

rightFooterRange.Fields.Add(rightFooterRange, WdFieldType.wdFieldPage);

rightFooterRange.Text += " 页";

// 设置边框

footer.Range.Borders[WdBorderType.wdBorderTop].LineStyle = WdLineStyle.wdLineStyleSingle;

footer.Range.Borders[WdBorderType.wdBorderTop].LineWidth = WdLineWidth.wdLineWidth050pt;

}

// 保存模板

document.SaveAs(templatePath, WdSaveFormat.wdFormatXMLTemplate);

document.Close();

Console.WriteLine($"企业文档模板已创建: {templatePath}");

}

catch (Exception ex)

{

Console.WriteLine($"创建企业文档模板时发生错误: {ex.Message}");

}

}

}

打印文档

文档打印是Word自动化处理的最后一步。通过PrintOut方法,我们可以控制文档的打印行为,包括打印份数、范围等。

当你花费大量时间精心制作了一份文档,最终的打印输出却出现问题,是不是很让人沮丧?通过掌握精确的打印控制技巧,你可以确保文档以最佳状态呈现给读者,避免因打印设置不当而导致的尴尬。

使用 Document.PrintOut 方法及其参数控制打印份数、范围等

MudTools.OfficeInterop.Word提供了简洁的PrintOut方法来控制文档打印。

using MudTools.OfficeInterop;

using MudTools.OfficeInterop.Word;

using System;

// 打开文档

using var wordApp = WordFactory.Open(@"C:\Documents\MyDocument.docx");

var document = wordApp.ActiveDocument;

// 基本打印:打印一份完整文档

document.PrintOut();

// 打印两份完整文档

document.PrintOut(copies: 2);

// 打印指定页面(例如第3到第5页)

document.PrintOut(pages: "3-5");

// 打印多个不连续页面

document.PrintOut(pages: "1,3,5-7");

// 打印多份指定页面

document.PrintOut(copies: 3, pages: "1-2");

应用场景:批量打印文档

在企业环境中,经常需要批量打印文档,并可能需要不同的打印设置。

// 批量文档打印管理器

public class BatchDocumentPrintManager

{

/// <summary>

/// 批量打印文档

/// </summary>

/// <param name="documentPaths">文档路径列表</param>

/// <param name="copies">打印份数</param>

/// <param name="pageRange">页码范围</param>

public void BatchPrintDocuments(List<string> documentPaths, int copies = 1, string pageRange = "")

{

foreach (var documentPath in documentPaths)

{

try

{

// 打开文档

using var wordApp = WordFactory.Open(documentPath);

var document = wordApp.ActiveDocument;

// 隐藏Word应用程序以提高性能

wordApp.Visibility = WordAppVisibility.Hidden;

wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;

// 打印文档

document.PrintOut(copies: copies, pages: pageRange);

// 关闭文档

document.Close(false); // 不保存更改

Console.WriteLine($"文档已打印: {documentPath}");

}

catch (Exception ex)

{

Console.WriteLine($"打印文档 {documentPath} 时发生错误: {ex.Message}");

}

}

}

/// <summary>

/// 根据文档类型应用不同的打印设置

/// </summary>

/// <param name="documentPath">文档路径</param>

/// <param name="documentType">文档类型</param>

public void PrintDocumentByType(string documentPath, string documentType)

{

try

{

// 打开文档

using var wordApp = WordFactory.Open(documentPath);

var document = wordApp.ActiveDocument;

// 隐藏Word应用程序以提高性能

wordApp.Visibility = WordAppVisibility.Hidden;

wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;

// 根据文档类型应用不同的打印设置

switch (documentType.ToLower())

{

case "report":

// 报告类文档:打印所有页面,2份

document.PrintOut(copies: 2);

break;

case "contract":

// 合同类文档:打印所有页面,1份

document.PrintOut(copies: 1);

break;

case "invoice":

// 发票类文档:只打印第一页,2份

document.PrintOut(copies: 2, pages: "1");

break;

case "manual":

// 手册类文档:打印指定页面,1份

document.PrintOut(pages: "1-10");

break;

default:

// 默认打印所有页面,1份

document.PrintOut();

break;

}

// 关闭文档

document.Close(false);

Console.WriteLine($"文档已按{documentType}类型打印: {documentPath}");

}

catch (Exception ex)

{

Console.WriteLine($"打印文档时发生错误: {ex.Message}");

}

}

}

高级打印控制

虽然MudTools.OfficeInterop.Word目前只提供了基本的打印参数,但在实际应用中,我们可以通过其他方式实现更精细的打印控制。

// 文档打印配置器

public class DocumentPrintConfigurer

{

/// <summary>

/// 配置并打印文档

/// </summary>

/// <param name="documentPath">文档路径</param>

/// <param name="printerName">打印机名称</param>

/// <param name="copies">打印份数</param>

/// <param name="isCollated">是否逐份打印</param>

public void ConfigureAndPrintDocument(string documentPath, string printerName, int copies, bool isCollated)

{

try

{

// 打开文档

using var wordApp = WordFactory.Open(documentPath);

var document = wordApp.ActiveDocument;

// 设置打印机(如果指定)

if (!string.IsNullOrEmpty(printerName))

{

wordApp.ActivePrinter = printerName;

}

// 隐藏Word应用程序以提高性能

wordApp.Visibility = WordAppVisibility.Hidden;

wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;

// 注意:当前版本的MudTools.OfficeInterop.Word只支持基本的打印参数

// 更高级的打印控制需要通过其他方式实现

// 打印文档

document.PrintOut(copies: copies);

// 关闭文档

document.Close(false);

Console.WriteLine($"文档已打印: {documentPath}");

}

catch (Exception ex)

{

Console.WriteLine($"打印文档时发生错误: {ex.Message}");

}

}

}

实战:创建一个具有专业格式的文档模板并演示打印设置

现在,让我们综合运用前面学到的知识,创建一个具有专业格式的文档模板,并演示如何进行页面设置和打印控制。

在实际工作中,我们经常需要创建符合公司标准的文档模板,并能够快速生成和打印文档。通过下面的完整示例,你将学会如何创建一个真正实用的专业文档模板,以及如何自动化整个文档生成和打印流程。

using MudTools.OfficeInterop;

using MudTools.OfficeInterop.Word;

using System;

using System.Collections.Generic;

// 专业文档模板创建器

public class ProfessionalDocumentTemplateCreator

{

/// <summary>

/// 创建专业文档模板

/// </summary>

/// <param name="templatePath">模板保存路径</param>

public void CreateProfessionalDocumentTemplate(string templatePath)

{

try

{

// 创建新文档

using var wordApp = WordFactory.BlankWorkbook();

var document = wordApp.ActiveDocument;

// 隐藏Word应用程序以提高性能

wordApp.Visibility = WordAppVisibility.Hidden;

wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;

// 设置页面格式

SetupPageFormat(document);

// 设置页眉页脚

SetupHeadersAndFooters(document);

// 添加模板内容示例

AddTemplateContent(document);

// 保存为模板

document.SaveAs(templatePath, WdSaveFormat.wdFormatXMLTemplate);

document.Close();

Console.WriteLine($"专业文档模板已创建: {templatePath}");

}

catch (Exception ex)

{

Console.WriteLine($"创建专业文档模板时发生错误: {ex.Message}");

}

}

/// <summary>

/// 设置页面格式

/// </summary>

/// <param name="document">Word文档</param>

private void SetupPageFormat(IWordDocument document)

{

// 为所有节设置页面格式

foreach (IWordSection section in document.Sections)

{

var pageSetup = section.PageSetup;

// 设置A4纸张,纵向

pageSetup.PaperSize = WdPaperSize.wdPaperA4;

pageSetup.Orientation = WdOrientation.wdOrientPortrait;

// 设置页边距(标准商业文档)

pageSetup.TopMargin = 72; // 1英寸

pageSetup.BottomMargin = 72; // 1英寸

pageSetup.LeftMargin = 90; // 1.25英寸

pageSetup.RightMargin = 90; // 1.25英寸

// 启用首页不同页眉页脚

section.PageSetup.DifferentFirstPageHeaderFooter = 1;

}

}

/// <summary>

/// 设置页眉页脚

/// </summary>

/// <param name="document">Word文档</param>

private void SetupHeadersAndFooters(IWordDocument document)

{

// 设置首页页眉

var firstSection = document.Sections[1];

var firstHeader = firstSection.Headers[WdHeaderFooterIndex.wdHeaderFooterFirstPage];

firstHeader.Range.Text = "专业文档模板\n";

firstHeader.Range.Font.Name = "微软雅黑";

firstHeader.Range.Font.Size = 20;

firstHeader.Range.Font.Bold = true;

firstHeader.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;

// 设置普通页页眉

foreach (IWordSection section in document.Sections)

{

var header = section.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary];

header.Range.Text = "文档标题\n";

header.Range.Font.Name = "微软雅黑";

header.Range.Font.Size = 12;

header.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;

}

// 设置页脚

foreach (IWordSection section in document.Sections)

{

var footer = section.Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary];

// 左侧显示文档信息

footer.Range.Text = "保密等级: 内部使用\n";

footer.Range.Font.Name = "微软雅黑";

footer.Range.Font.Size = 8;

// 右侧显示页码

var pageNumRange = footer.Range.Duplicate;

pageNumRange.Collapse(WdCollapseDirection.wdCollapseEnd);

pageNumRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphRight;

pageNumRange.Text = "第 ";

pageNumRange.Fields.Add(pageNumRange, WdFieldType.wdFieldPage);

pageNumRange.Text += " 页";

}

}

/// <summary>

/// 添加模板内容示例

/// </summary>

/// <param name="document">Word文档</param>

private void AddTemplateContent(IWordDocument document)

{

// 获取文档内容范围

var contentRange = document.Content;

// 添加文档标题

contentRange.Text = "文档标题\n";

contentRange.Font.Name = "微软雅黑";

contentRange.Font.Size = 16;

contentRange.Font.Bold = true;

contentRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;

contentRange.ParagraphFormat.SpaceAfter = 12;

// 添加文档信息

var infoRange = contentRange.Duplicate;

infoRange.Collapse(WdCollapseDirection.wdCollapseEnd);

infoRange.Text = "文档编号: [编号]\n创建日期: [日期]\n版本: [版本号]\n\n";

infoRange.Font.Name = "微软雅黑";

infoRange.Font.Size = 10;

infoRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft;

infoRange.ParagraphFormat.SpaceAfter = 6;

// 添加目录占位符

var tocRange = infoRange.Duplicate;

tocRange.Collapse(WdCollapseDirection.wdCollapseEnd);

tocRange.Text = "目录\n";

tocRange.Font.Name = "微软雅黑";

tocRange.Font.Size = 14;

tocRange.Font.Bold = true;

tocRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;

tocRange.ParagraphFormat.SpaceAfter = 12;

tocRange.Text += "[目录内容]\n\n";

tocRange.Font.Bold = false;

tocRange.Font.Size = 12;

tocRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft;

// 添加正文内容示例

var bodyRange = tocRange.Duplicate;

bodyRange.Collapse(WdCollapseDirection.wdCollapseEnd);

bodyRange.Text = "1. 引言\n\n";

bodyRange.Font.Name = "微软雅黑";

bodyRange.Font.Size = 14;

bodyRange.Font.Bold = true;

bodyRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft;

bodyRange.ParagraphFormat.SpaceAfter = 12;

bodyRange.Text += "这是文档正文内容的示例。在这里可以添加文档的主要内容。\n\n";

bodyRange.Font.Bold = false;

bodyRange.Font.Size = 12;

bodyRange.ParagraphFormat.FirstLineIndent = 28; // 首行缩进2字符

bodyRange.ParagraphFormat.LineSpacingRule = WdLineSpacing.wdLineSpace1pt5; // 1.5倍行距

}

/// <summary>

/// 使用模板创建并打印文档

/// </summary>

/// <param name="templatePath">模板路径</param>

/// <param name="outputPath">输出文档路径</param>

/// <param name="printCopies">打印份数</param>

public void CreateAndPrintDocument(string templatePath, string outputPath, int printCopies = 1)

{

try

{

// 基于模板创建新文档

using var wordApp = WordFactory.CreateFrom(templatePath);

var document = wordApp.ActiveDocument;

// 隐藏Word应用程序以提高性能

wordApp.Visibility = WordAppVisibility.Hidden;

wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;

// 替换模板中的占位符

document.FindAndReplace("[编号]", "DOC-2023-001");

document.FindAndReplace("[日期]", DateTime.Now.ToString("yyyy-MM-dd"));

document.FindAndReplace("[版本号]", "1.0");

document.FindAndReplace("[目录内容]", "1. 引言 .................... 1\n2. 主要内容 ................ 2\n3. 结论 .................... 3");

document.FindAndReplace("文档标题", "2023年度技术报告");

// 保存文档

document.SaveAs(outputPath,

WdSaveFormat.wdFormatXMLDocument);

// 打印文档

if (printCopies > 0)

{

document.PrintOut(copies: printCopies);

Console.WriteLine($"文档已打印 {printCopies} 份");

}

// 关闭文档

document.Close();

Console.WriteLine($"文档已创建: {outputPath}");

}

catch (Exception ex)

{

Console.WriteLine($"创建和打印文档时发生错误: {ex.Message}");

}

}

}

// 使用示例

class Program

{

static void Main(string[] args)

{

var creator = new ProfessionalDocumentTemplateCreator();

// 创建专业文档模板

string templatePath = @"C:\Templates\ProfessionalDocumentTemplate.dotx";

creator.CreateProfessionalDocumentTemplate(templatePath);