using Microsoft.Office.Interop.Word; using System.Collections.Generic; using System.Text; using UtilLib; namespace AIProofread.Model { public class ExportDataItem { public int PageNumber { get; set; } public int LineNumber { get; set; } public string OriginSentence { get; set; } public CorrectItem Item { get; set; } private static readonly int MAX_WORD_LENGTH = 128; public ExportDataItem(CorrectItem item, int pageNumber, int lineNumber,string originSentence = "") { Item = item; PageNumber = pageNumber; LineNumber = lineNumber; OriginSentence = originSentence; } public static string GetSentence(ProofreadItem item) { var sentence = item.OriginSentence; var isInsert = item.content.Tag == "i"; if (sentence.Length <= MAX_WORD_LENGTH && !isInsert) { return sentence; } var range = item.mark.Range; // 获取range所在句子 //var first = range.Sentences.First.Start; //var last = range.Sentences.Last.End; var sentences = range.Sentences; var sb = new StringBuilder(); foreach (Microsoft.Office.Interop.Word.Range s in sentences) { var str = s.Text; if (isInsert && range.Start >= s.Start && range.End <= s.End) { sb.Append(str.Replace(" ", "˽")); } else { sb.Append(str); } } var first = sentences.First; item.content.Start = range.Start - first.Start; item.content.End = range.End - first.Start; return sb.ToString().Trim(); } public static List GetExportData(Dictionary marks) { List list = new List(); foreach (var item in marks) { // 没有mark if (item.Value.mark == null) continue; var it = item.Value.content; // 单纯删除空格 if (it.Tag == "d" && it.Origin.Trim().Length == 0) continue; var range = item.Value.mark.Range; // 获取书签在文档的页码数 var pageNumber = range.get_Information(WdInformation.wdActiveEndPageNumber); // 获取书签在当前页面的行数 var lineNumber = range.get_Information(WdInformation.wdFirstCharacterLineNumber); list.Add(new ExportDataItem(it, pageNumber, lineNumber,GetSentence(item.Value))); } // 根据页码和行数排序 list.Sort((x, y) => { if (x.PageNumber == y.PageNumber) { if(x.LineNumber == y.LineNumber) { // 如果行数相同,则根据起始位置排序 return x.Item.Id.CompareTo(y.Item.Id); } // 如果页码相同,则根据行数排序 return x.LineNumber.CompareTo(y.LineNumber); } return x.PageNumber.CompareTo(y.PageNumber); }); return list; } } }