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);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
}
 |