From 1644a1591f6deda87a2ceff9a497b39a19849e1f Mon Sep 17 00:00:00 2001 From: callmeyan Date: Tue, 15 Apr 2025 17:22:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/AIProofread/v17/.suo | Bin 2912256 -> 2912256 bytes AIProofread/AIProofread.csproj | 1 + AIProofread/Config.cs | 5 +- AIProofread/Controls/ProofreadMainControl.cs | 47 +++++++++++++++++-- AIProofread/core/CorrectResultExportor.cs | 46 +++++++++--------- AIProofread/core/WebView2EventHandler.cs | 38 +++++++++++++++ 6 files changed, 111 insertions(+), 26 deletions(-) create mode 100644 AIProofread/core/WebView2EventHandler.cs diff --git a/.vs/AIProofread/v17/.suo b/.vs/AIProofread/v17/.suo index 30950c55f763bcdc2e02fb99be3342f165241469..f150143e05d317d808853b00e9df3270005a2e4f 100644 GIT binary patch delta 59261 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 EA5an*SpWb4 diff --git a/AIProofread/AIProofread.csproj b/AIProofread/AIProofread.csproj index e1a1fbe..fe1c286 100644 --- a/AIProofread/AIProofread.csproj +++ b/AIProofread/AIProofread.csproj @@ -401,6 +401,7 @@ + diff --git a/AIProofread/Config.cs b/AIProofread/Config.cs index 54a59b2..2425cc3 100644 --- a/AIProofread/Config.cs +++ b/AIProofread/Config.cs @@ -52,7 +52,7 @@ namespace AIProofread /// /// 网页访问地址 /// - public static string WEB_PATH = AppServer.DEV; //pre-gm-plugin.gachafun.com localhost:5173 gm2-plugin.zverse.group + public static string WEB_PATH = AppServer.TEST; //pre-gm-plugin.gachafun.com localhost:5173 gm2-plugin.zverse.group public static bool RUN_IN_DEBUG = true; public static AppEnvironment APP_ENV = AppEnvironment.Dev; #else @@ -103,7 +103,8 @@ namespace AIProofread /// public static string WebPath(string path) { - return WEB_PATH + path; + Random r = new Random(); + return WEB_PATH + path + (path.IndexOf("?") == -1 ? "?":"&") + $"ver={APP_VERSION}&r=" + r.NextDouble(); } } } diff --git a/AIProofread/Controls/ProofreadMainControl.cs b/AIProofread/Controls/ProofreadMainControl.cs index 4409e67..4be59e2 100644 --- a/AIProofread/Controls/ProofreadMainControl.cs +++ b/AIProofread/Controls/ProofreadMainControl.cs @@ -1,5 +1,6 @@ -using Microsoft.Office.Interop.Word; + using Microsoft.Web.WebView2.Core; +using Microsoft.Web.WebView2.WinForms; using System; using System.Windows.Forms; @@ -11,15 +12,55 @@ namespace AIProofread.Controls { InitializeComponent(); Bridge.InitWebEnvAsync("main", web); - //this.minWidth = 420 * LabelWidth() / 42; //this.MinimumSize = new System.Drawing.Size(this.minWidth, 0); } + private bool isShowingErrorPage = false; + public void WebView2NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e) + { + if (isShowingErrorPage) + { + return; + } + if (e.IsSuccess) + { + isShowingErrorPage = false; + return; + } + + isShowingErrorPage = true; + string errorPageHtml = @" + + + 加载失败 + + + +

页面加载失败

+

请检查您的网络连接或稍后再试。

+ 重新加载 + + "; + (sender as WebView2).CoreWebView2.NavigateToString(errorPageHtml); + + } private void ProofreadMainControl_Load(object sender, EventArgs e) { - this.web.Source = new Uri(Config.WebPath("correct?version=" + Config.APP_VERSION + "&t=" + DateTime.Now.Ticks)); + this.web.NavigationCompleted += WebView2NavigationCompleted; + this.web.WebMessageReceived += (s, ex) => + { + if (ex.TryGetWebMessageAsString() == "reload") + { + isShowingErrorPage = false; + web.Source = new Uri(Config.WebPath("correct")); + } + }; + this.web.Source = new Uri(Config.WebPath("correct" )); //this.SizeChanged += ProofreadMainControl_SizeChanged; } diff --git a/AIProofread/core/CorrectResultExportor.cs b/AIProofread/core/CorrectResultExportor.cs index ab5caf7..0416dd4 100644 --- a/AIProofread/core/CorrectResultExportor.cs +++ b/AIProofread/core/CorrectResultExportor.cs @@ -2,9 +2,7 @@ using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; using DocumentFormat.OpenXml; -using System.Windows.Forms; using UtilLib; -using System.Diagnostics; using System; using log4net; @@ -22,9 +20,9 @@ namespace AIProofread.core private static CorrectResultExportor exportor = new CorrectResultExportor(); - private HexBinaryValue primaryColor = new HexBinaryValue("D6AA69"); - private HexBinaryValue whiteColor = new HexBinaryValue("FFFFFF"); - private HexBinaryValue blackColor = new HexBinaryValue("000000"); + private HexBinaryValue primaryColor = new HexBinaryValue("FFD6AA69"); + private HexBinaryValue whiteColor = new HexBinaryValue("FFFFFFFF"); + private HexBinaryValue blackColor = new HexBinaryValue("FF000000"); private CorrectResultExportor() { @@ -166,7 +164,7 @@ namespace AIProofread.core workbookPart.Workbook = new Workbook(); WorksheetPart worksheetPart = workbookPart.AddNewPart(); - var worksheet = new Worksheet(new SheetData()); + var worksheet = new Worksheet(); // 冻结首行 worksheet.Append(new SheetViews( new SheetView() @@ -185,6 +183,9 @@ namespace AIProofread.core // 创建 Sheets sheets = document.WorkbookPart.Workbook.AppendChild(new Sheets()); + // 美化sheet + StyleSheet(worksheet); // column 必须在sheet data 之前 + worksheet.Append(new SheetData()); Sheet sheet = new Sheet() { Id = document.WorkbookPart.GetIdOfPart(worksheetPart), @@ -204,24 +205,23 @@ namespace AIProofread.core try { CreateRow(sheetData, item, ref rowIndex); - }catch(Exception ex) + } + catch (Exception ex) { - Debug.WriteLine(ex.Message); + Logger.Error("导出勘误表异常:" + ex.Message, ex); } } - // 美化sheet - StyleSheet(worksheetPart); // 筛选 worksheetPart.Worksheet.Append(new AutoFilter { Reference = "A1:G1" }); //sheet.Append(new AutoFilter() { Reference = "A1:G1"}); } stopwatch.Stop(); - Logger.Info("导出勘误表"+fileName+"完成,运行时间:" + stopwatch.Elapsed.TotalMilliseconds + "毫秒"); + Logger.Info("导出勘误表" + fileName + "完成,运行时间:" + stopwatch.Elapsed.TotalMilliseconds + "毫秒"); } - private void StyleSheet(WorksheetPart worksheetPart) + private void StyleSheet(Worksheet worksheet) { // 设置列宽 Columns columns = new Columns(); @@ -230,7 +230,7 @@ namespace AIProofread.core SetColumnWidth(4, 80, columns); SetColumnWidth(5, 6, 20, columns); SetColumnWidth(7, 10, columns); - worksheetPart.Worksheet.InsertAt(columns, 1); + worksheet.Append(columns); } private void SetColumnWidth(uint colIndex, int width, Columns columns) @@ -348,9 +348,9 @@ namespace AIProofread.core var afterText = it.Start >= originSentence.Length ? null : originSentence.Substring(it.Start + richTextLength); var inlineString = new InlineString(); - AppendNormalTextToCell(beforeText, inlineString); - AppendRichTextToCell(richText, inlineString, "FF0000"); - AppendNormalTextToCell(afterText, inlineString); + AppendRichTextToCell(beforeText, inlineString); + AppendRichTextToCell(richText, inlineString, "FFFF0000"); + AppendRichTextToCell(afterText, inlineString); cell.InlineString = inlineString; row.AppendChild(cell); } @@ -445,19 +445,23 @@ namespace AIProofread.core row.AppendChild(cell); } - private void AppendNormalTextToCell(string text, InlineString inlineString) + private void AppendNormalTextToCell(string text, InlineString inlineString, string color = "FF000000", string fontName = "宋体") { if (string.IsNullOrEmpty(text)) return; + var props = new RunProperties( + new FontSize() { Val = 11 } + ); + if (color != "FF000000") props.Append(new Color() { Rgb = new HexBinaryValue(color) }); + if (fontName != "宋体") props.Append(new RunFont() { Val = fontName }); var run = new Run( - new RunFont() { Val = "宋体" }, - new FontSize() { Val = 11 }, + props, new Text(text) { Space = SpaceProcessingModeValues.Preserve } ); inlineString.Append(run); } - private void AppendRichTextToCell(string text, InlineString inlineString, string color = "000000", string fontName = "宋体") + private void AppendRichTextToCell(string text, InlineString inlineString, string color = "FF000000", string fontName = "宋体") { if (string.IsNullOrEmpty(text)) return; var props = new RunProperties( @@ -466,7 +470,7 @@ namespace AIProofread.core if (color != "000000") props.Append(new Color() { Rgb = new HexBinaryValue(color) }); if (fontName != "宋体") props.Append(new RunFont() { Val = fontName }); var run = new Run(props, new Text(text) { Space = SpaceProcessingModeValues.Preserve }); - inlineString.AppendChild(run); + inlineString.Append(run); } } } diff --git a/AIProofread/core/WebView2EventHandler.cs b/AIProofread/core/WebView2EventHandler.cs new file mode 100644 index 0000000..0b8633a --- /dev/null +++ b/AIProofread/core/WebView2EventHandler.cs @@ -0,0 +1,38 @@ +using Microsoft.Web.WebView2.Core; +using Microsoft.Web.WebView2.WinForms; +using System; +using System.Linq; + +namespace AIProofread.core +{ + public class WebView2EventHandler + { + public static void WebView2NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e) + { + if (e.IsSuccess) + { + return; + } + string errorPageHtml = @" + + + 加载失败 + + + +

页面加载失败

+

请检查您的网络连接或稍后再试。

+ + "; + if (e.NavigationId == 0) + { + (sender as WebView2).CoreWebView2.NavigateToString(errorPageHtml); + } + + + } + } +}