Spire.Doc Word文档模板数据替换

您所在的位置:网站首页 替换word样式 Spire.Doc Word文档模板数据替换

Spire.Doc Word文档模板数据替换

2023-04-02 17:20| 来源: 网络整理| 查看: 265

目录

项目背景介绍

关于Spire.Doc

功能实现

模板文字替换方法

 文档插入附件

指定位置插入电子签名、电子公章等

创建复选框

去除word空白节

table 表格动态添加行并填充数据

模板归档生成效果示例

项目背景介绍

最近做了一个关于医疗机构证件审核的小型OA项目,项目中需要实现对医疗机构相关资料的文件归档功能,包含相关的文字信息、图片信息、表格信息以及pdf附件等文件的处理

关于Spire.Doc

详情参见 Spire.Doc

也可参见文档 .NET office开发组件_蓝晶之心的博客-CSDN博客查看简单介绍 

功能实现

Nuget中安装 FreeSpire.Doc、FreeSpire.PDF、iTextSharp.LGPLv2.Core

创建Spire.Doc 帮助类SpireDocHelper.cs

模板文字替换方法 /// /// word 模板替换 /// /// /// /// private static void ReplaceKey(T etity, Spire.Doc.Document doc) { Type entityType = typeof(T); PropertyInfo[] properties = entityType.GetProperties(); string entityName = entityType.Name;//实体类名称 foreach (var p in properties) { string propteryName = "{$" + p.Name + "}";//Word模板中设定的需要替换的标签 object value = p.GetValue(etity); if (value == null) { value = ""; } doc.Replace(propteryName, value.ToString(), true, true); } }

调用示例:

//Entity 数据信息 PublicNoticeView viewData = new PublicNoticeView(); viewData.OrgName = orgInfo.DeptName; viewData.PersonName = legalPerson.PersonName; viewData.OrgType = orgInfo.DeptType; viewData.OrgAddress = orgProfile.OrgAddress; viewData.ServiceTarget = orgProfile.ServiceTarget; viewData.BedNum = (orgProfile.BedNum ?? 0).ToString(); viewData.ToothChairNum= (orgProfile.ToothChairNum ?? 0).ToString(); viewData.DiagnosisItems = diagnosisInfoTxt.ToString().TrimEnd('、'); viewData.OperationNature = orgProfile.OperationNature; //加载文档 Spire.Doc.Document doc = new Spire.Doc.Document(); doc.LoadFromFile(@"D:\templete.docx");//加载模板文件路径 ReplaceKey(viewData, doc); //保存替换后的模板文件 string savePath = @"D:\"+ "newTemplete.docx"; if (File.Exists(savePath)) { File.Delete(savePath);//删除原文件 } doc.SaveToFile(savePath, FileFormat.Docx); doc.Close();  文档插入附件 /// /// 文档插入附件 /// /// /// 附件路径 /// 文件根目录 private void InsertFile(Spire.Doc.Document doc, string filePath, string docRootPath) { string fullPath = docRootPath + filePath; if (File.Exists(fullPath)) { try { string extension = Path.GetExtension(fullPath).ToLower();//获取文件名后缀 //图片 if (extension == ".png" || extension == ".jpg" || extension == ".jpeg" || extension == ".bmp") { InsertImg(doc, fullPath); } else if (extension == ".doc" || extension == ".docx") { doc.InsertTextFromFile(fullPath, FileFormat.Docx); doc.AddSection(); } else if (extension == ".pdf") { InsertPdf(doc, docRootPath, fullPath); } } catch (Exception ex) { logger.Error($"插入附件{fullPath}失败:" + ex.StackTrace); } } } /// /// 插入pdf /// /// /// /// private void InsertPdf(Spire.Doc.Document doc, string rootPath, string pdfPath) { try { //由于Spire.Pdf只可以转换前3页内容,因此超过三页内容的pdf使用itextSharp处理单页,再使用Spire.Pdf转换为图片保存 //Spire.Pdf.PdfDocument docPdf = new Spire.Pdf.PdfDocument(); //docPdf.LoadFromFile(pdfPath); //int pdfPages = docPdf.Pages.Count; iTextSharp.text.pdf.PdfReader pdfReaderAll = new iTextSharp.text.pdf.PdfReader(pdfPath); int pdfPages = pdfReaderAll.NumberOfPages; pdfReaderAll.Close(); if (pdfPages 590) { int newWidth = 580; int newHeight = height * newWidth / width; Image newImg = new Bitmap(newWidth, newHeight); Graphics g = Graphics.FromImage(newImg); g.DrawImage(originImg, 0, 0, newWidth, newHeight); return newImg; } else { return originImg; } } /// /// 电子签证图片设置 /// /// document /// 电子图片路径 /// 需要替换的文本 /// 电子图宽度 /// 电子图高度 /// HorizontalPosition /// VerticalPosition /// 是否需要将文本替换为空 private void SetESign(Spire.Doc.Document doc, string imgPath, string findText, float width, float height, float hp, float vp, bool replaceEmpty = false) { if (File.Exists(imgPath)) { TextSelection selection = doc.FindString(findText, false, false); TextRange range = selection.GetAsOneRange(); Paragraph para = range.OwnerParagraph; DocPicture picture = para.AppendPicture(Image.FromFile(imgPath)); picture.Width = width; picture.Height = height; picture.HorizontalPosition = hp;//指定图片位置 picture.VerticalPosition = vp; picture.TextWrappingStyle = TextWrappingStyle.InFrontOfText; //指定文字环绕方式 picture.TextWrappingType = TextWrappingType.Both; } if (replaceEmpty) { doc.Replace(findText, "", true, true); } } 指定位置插入电子签名、电子公章等 /// /// 电子签证图片设置 /// /// document /// 电子图片路径 /// 需要替换的文本 /// 电子图宽度 /// 电子图高度 /// HorizontalPosition /// VerticalPosition /// 是否需要将文本替换为空 private void SetESign(Spire.Doc.Document doc, string imgPath, string findText, float width, float height, float hp, float vp, bool replaceEmpty = false) { if (File.Exists(imgPath)) { TextSelection selection = doc.FindString(findText, false, false); TextRange range = selection.GetAsOneRange(); Paragraph para = range.OwnerParagraph; DocPicture picture = para.AppendPicture(Image.FromFile(imgPath)); picture.Width = width; picture.Height = height; picture.HorizontalPosition = hp;//指定图片位置 picture.VerticalPosition = vp; picture.TextWrappingStyle = TextWrappingStyle.InFrontOfText; //指定文字环绕方式 picture.TextWrappingType = TextWrappingType.Both; } if (replaceEmpty) { doc.Replace(findText, "", true, true); } } 创建复选框 /// /// 需要生成的checkbox信息 /// public class CheckBoxInfo { /// /// 需要替换的文本 /// public string ReplaceTxt { get; set; } /// /// 是否选中 /// public bool IsChecked { get; set; } } /// /// 动态创建复选框 /// /// /// private void CreateCheckBox(Spire.Doc.Document doc, List checkBoxInfos) { foreach (var item in checkBoxInfos) { string charTxt = item.IsChecked == true ? ((char)82).ToString() : ((char)163).ToString(); TextSelection selection = doc.FindString(item.ReplaceTxt, true, true); TextRange tr = selection.GetAsOneRange(); tr.CharacterFormat.FontName = "Wingdings 2"; doc.Replace(selection.SelectedText, charTxt, true, true); } } 去除word空白节 /// /// 去除空白节 /// /// /// private Document RemoveWhiteSec(Spire.Doc.Document doc) { Spire.Doc.Document docNew = new Spire.Doc.Document(); foreach (Section section in doc.Sections) { if (section.Paragraphs.Count > 0) { docNew.Sections.Add(section.Clone()); } } return docNew; } table 表格动态添加行并填充数据 //加载文档 Spire.Doc.Document doc = new Spire.Doc.Document(); doc.LoadFromFile(@"D:\templete.docx"); //数据处理 生成表格数据 Section section = doc.Sections[0]; Table tb = section.Tables[0] as Table;//获取第一个表格 int rowNum = staffCvDatas.Count();//需要添加的行数 //添加行数 for (int i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3