using IRaCIS.Core.Domain.Share; using NPOI.XWPF.UserModel; using System.Globalization; using Xceed.Document.NET; using Xceed.Words.NET; namespace IRaCIS.Core.Application.Helper { /// /// 利用DocX 库 处理word国际化模板 /// public static class WordTempleteHelper { public static void DocX_GetInternationalTempleteStream(string filePath, Stream memoryStream) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; using (DocX document = DocX.Load(filePath)) { // 查找书签 var bookmarkEn_Start = document.Bookmarks.FirstOrDefault(b => b.Name == StaticData.CultureInfo.en_US_bookMark); if (bookmarkEn_Start != null) { // 获取书签的起始位置 //int bookmarkCNStartPos = bookmarkCn_Start.Paragraph.StartIndex; var bookmarkENStartPos = bookmarkEn_Start.Paragraph.StartIndex; // 创建一个要删除段落的列表 List paragraphsToRemove = new List(); foreach (var item in document.Paragraphs) { //中文模板在前,英文在后,英文模板,就删除英文之前的,中文模板就删除英文之后的 if (isEn_US ? item.EndIndex < bookmarkENStartPos : item.StartIndex >= bookmarkENStartPos) { paragraphsToRemove.Add(item); } } foreach (var paragraph in paragraphsToRemove) { document.RemoveParagraph(paragraph); } } // 保存修改 document.SaveAs(memoryStream); } } public static void Npoi_GetInternationalTempleteStream(string filePath, Stream memoryStream) { var isEn_US = CultureInfo.CurrentCulture.Name == StaticData.CultureInfo.en_US; using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { XWPFDocument doc = new XWPFDocument(fs); // 查找包含指定书签的段落及其索引 var bookmarkParagraph = doc.Paragraphs .FirstOrDefault(p => p.GetCTP().GetBookmarkStartList().Any(b => b.name == StaticData.CultureInfo.en_US_bookMark)); if (bookmarkParagraph != null) { int bookmarkIndex = doc.Paragraphs.IndexOf(bookmarkParagraph); if (isEn_US) { // 从书签所在段落开始,删除之前的所有段落 for (int i = bookmarkIndex - 1; i >= 0; i--) { doc.RemoveBodyElement(i); } } else { // 删除书签之后的所有段落 for (int i = doc.Paragraphs.Count - 1; i >= bookmarkIndex; i--) { doc.RemoveBodyElement(i); } } } doc.Write(memoryStream); } } } }