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