85 lines
2.9 KiB
C#
85 lines
2.9 KiB
C#
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 = 5;
|
|
|
|
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;
|
|
if (sentence.Length <= MAX_WORD_LENGTH)
|
|
{
|
|
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)
|
|
{
|
|
sb.Append(s.Text);
|
|
}
|
|
return sb.ToString().Trim();
|
|
}
|
|
|
|
public static List<ExportDataItem> GetExportData(Dictionary<int, ProofreadItem> marks)
|
|
{
|
|
List<ExportDataItem> list = new List<ExportDataItem>();
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|