.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)

页眉和页脚是文档中重要的组成部分,它们通常包含页码、文档标题、日期等信息。通过IWordHeadersFootersIWordHeaderFooter接口,我们可以灵活地控制每个节的页眉页脚。

专业的文档不仅内容要精彩,外观也要精致。页眉页脚就像文档的"名片",不仅提供导航信息,还能增强文档的专业性和一致性。通过巧妙地设计页眉页脚,你可以让文档在众多普通文档中脱颖而出。

为不同节设置不同的页眉页脚

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

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("操作完成!");     } } 

发表评论

评论已关闭。

相关文章