本文将详细介绍如何使用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:ImagesCompanyLogo.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:DocumentsMyDocument.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版本: [版本号]nn"; 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 += "[目录内容]nn"; tocRange.Font.Bold = false; tocRange.Font.Size = 12; tocRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft; // 添加正文内容示例 var bodyRange = tocRange.Duplicate; bodyRange.Collapse(WdCollapseDirection.wdCollapseEnd); bodyRange.Text = "1. 引言nn"; bodyRange.Font.Name = "微软雅黑"; bodyRange.Font.Size = 14; bodyRange.Font.Bold = true; bodyRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft; bodyRange.ParagraphFormat.SpaceAfter = 12; bodyRange.Text += "这是文档正文内容的示例。在这里可以添加文档的主要内容。nn"; 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. 引言 .................... 1n2. 主要内容 ................ 2n3. 结论 .................... 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:TemplatesProfessionalDocumentTemplate.dotx"; creator.CreateProfessionalDocumentTemplate(templatePath); // 使用模板创建并打印文档 string documentPath = @"C:DocumentsTechnicalReport.docx"; creator.CreateAndPrintDocument(templatePath, documentPath, printCopies: 2); Console.WriteLine("操作完成!"); } }