96 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C#
		
	
	
| 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;
 | |
| 
 | |
| /// <summary>
 | |
| /// 利用DocX 库 处理word国际化模板
 | |
| /// </summary>
 | |
| 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<Paragraph> paragraphsToRemove = new List<Paragraph>();
 | |
| 
 | |
|                 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);
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 |