This commit is contained in:
HuangHai
2026-01-26 08:00:40 +08:00
parent 1f6a48004b
commit 6b6a32c902
23 changed files with 461 additions and 172 deletions

Binary file not shown.

View File

@@ -36,7 +36,7 @@
"RelativeDocumentMoniker": "WordAddIn\\AiRibbon.cs",
"ToolTip": "D:\\dsWork\\aiData\\WordAddIn\\WordAddIn\\AiRibbon.cs",
"RelativeToolTip": "WordAddIn\\AiRibbon.cs",
"ViewState": "AgIAACMAAAAAAAAAAAAowD8AAAAIAAAAAAAAAA==",
"ViewState": "AgIAAPcAAAAAAAAAAAA1wAsBAABFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2026-01-24T10:05:10.056Z",
"EditorCaption": ""

View File

@@ -36,7 +36,7 @@
"RelativeDocumentMoniker": "WordAddIn\\AiRibbon.cs",
"ToolTip": "D:\\dsWork\\aiData\\WordAddIn\\WordAddIn\\AiRibbon.cs",
"RelativeToolTip": "WordAddIn\\AiRibbon.cs",
"ViewState": "AgIAACMAAAAAAAAAAAAowD8AAAAIAAAAAAAAAA==",
"ViewState": "AgIAAPcAAAAAAAAAAAA1wAsBAABFAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2026-01-24T10:05:10.056Z",
"EditorCaption": ""

View File

@@ -215,6 +215,89 @@ namespace WordAddIn
}
}
/// <summary>
/// 【总结大纲】按钮点击事件处理。
/// 功能描述:
/// 1. 获取选中文本(或剪贴板内容)。
/// 2. 调用 AI 总结接口,将内容总结为结构化大纲。
/// 3. 弹出窗口展示大纲,并提供复制功能。
/// </summary>
/// <param name="control">触发事件的 Ribbon 控件</param>
public async void OnSummarizeOutlineClick(Office.IRibbonControl control)
{
if (!EnsureLoggedIn()) return;
LoadingForm loading = null;
try
{
var selection = Globals.ThisAddIn.Application.Selection;
string originalText = null;
// 1. 优先使用选区文本
if (selection.Type == Word.WdSelectionType.wdSelectionNormal && !string.IsNullOrWhiteSpace(selection.Text))
{
originalText = selection.Text.Trim();
}
// 2. 其次使用剪贴板文本
else
{
try
{
if (Clipboard.ContainsText())
{
originalText = Clipboard.GetText().Trim();
}
}
catch (Exception ex)
{
Console.WriteLine("Clipboard access failed: " + ex.Message);
}
}
if (string.IsNullOrWhiteSpace(originalText))
{
MessageBox.Show("请先选择一段文字,或者确保剪贴板中有内容。");
return;
}
loading = new LoadingForm("AI 正在总结大纲,请稍候...");
loading.Show();
loading.Refresh();
// 3. 调用 AI 服务进行总结
string outlineText = await Task.Run(() => _aiService.SummarizeToOutline(originalText));
loading.CloseSafe();
loading.Dispose();
loading = null;
if (!string.IsNullOrEmpty(outlineText))
{
// 4. 弹出结果展示窗体
using (var resultForm = new OutlineResultForm(outlineText))
{
resultForm.ShowDialog();
}
}
else
{
MessageBox.Show("总结大纲失败,AI 未返回有效内容。");
}
}
catch (Exception ex)
{
MessageBox.Show("总结大纲失败: " + ex.Message);
}
finally
{
if (loading != null)
{
loading.CloseSafe();
loading.Dispose();
}
}
}
/// <summary>
/// 【润色加工】按钮点击事件处理。
/// 功能描述:
@@ -740,47 +823,76 @@ namespace WordAddIn
{
var selection = Globals.ThisAddIn.Application.Selection;
string prompt = selection.Text;
// 1. 尝试获取选区文本
if (!string.IsNullOrWhiteSpace(prompt))
{
prompt = prompt.Trim();
}
// 2. 如果选区为空(或只包含空白字符),尝试获取剪贴板文本
if (string.IsNullOrWhiteSpace(prompt))
{
MessageBox.Show("请先选择一段描述图片的文字。");
try
{
if (Clipboard.ContainsText())
{
prompt = Clipboard.GetText().Trim();
}
}
catch (Exception ex)
{
// 忽略剪贴板访问错误(如被其他进程占用)
Console.WriteLine("Clipboard access failed: " + ex.Message);
}
}
// 3. 如果依然为空,提示用户
if (string.IsNullOrWhiteSpace(prompt))
{
MessageBox.Show("未能获取生图描述。\n请选择文档中的文字,或确保剪贴板中有文本内容。");
return;
}
// 1. 弹出图片风格设置窗体
string style = null;
string additionalPrompt = null;
using (var imgOptions = new ImageOptionsForm())
// 获取全文背景和参考资料上下文,合并到 Prompt 中供用户预览和编辑
string context = GetCombinedContext();
if (!string.IsNullOrWhiteSpace(context))
{
if (imgOptions.ShowDialog() != DialogResult.OK)
prompt += $"\n\n{context}";
}
// 弹出选项窗体
using (var form = new ImageOptionsForm())
{
// 传入源文本
form.SourceText = prompt;
if (form.ShowDialog() != DialogResult.OK)
{
return; // 用户取消
return;
}
style = imgOptions.SelectedStyle;
additionalPrompt = imgOptions.AdditionalPrompt;
}
// 2. 组合 Prompt:原文 + 补充要求
if (!string.IsNullOrWhiteSpace(additionalPrompt))
{
prompt += $"\n补充要求: {additionalPrompt}";
}
string finalPrompt = form.FinalPrompt;
bool shouldOptimize = form.ShouldOptimize;
string style = form.SelectedStyle;
loading = new LoadingForm("AI 正在绘制图片,请稍候...");
loading.Show();
loading.Refresh();
loading = new LoadingForm("AI 正在生成图片,请稍候...");
loading.Show();
loading.Refresh();
// 3. 调用 AI 服务生成图片 URL
// 注意:生图通常比较慢,需要耐心等待
string imageUrl = await Task.Run(() => _aiService.GenerateImageUrl(prompt, style));
// 3. 调用 AI 服务生成图片 URL
// 传入 finalPrompt 和 shouldOptimize
string imageUrl = await Task.Run(() => _aiService.GenerateImageUrl(finalPrompt, style, shouldOptimize));
if (!string.IsNullOrEmpty(imageUrl))
{
// 4. 插入图片
InsertImageFromUrl(imageUrl);
}
else
{
MessageBox.Show("未生成图片 URL。");
if (!string.IsNullOrEmpty(imageUrl))
{
// 4. 插入图片
InsertImageFromUrl(imageUrl);
}
else
{
MessageBox.Show("未生成图片 URL。");
}
}
}
catch (Exception ex)

View File

@@ -7,6 +7,7 @@
<button id="btnCreateOutline" label="创建大纲" size="large" onAction="OnCreateOutlineClick" imageMso="ViewOutlineView" />
<button id="btnOutlineSetting" label="大纲配置" size="large" onAction="OnOutlineSettingClick" imageMso="ParagraphDialog" />
<button id="btnReadFull" label="通读全文" size="large" onAction="OnReadFullClick" imageMso="FindDialog" />
<button id="btnSummarizeOutline" label="总结大纲" size="large" onAction="OnSummarizeOutlineClick" imageMso="GroupSmartArtQuickStyles" />
<button id="btnImportReference" label="补充背景" size="large" onAction="OnImportReferenceClick" imageMso="ImportTextFile" />
<button id="btnReferenceGenerate" label="素材写作" size="large" onAction="OnReferenceGenerateClick" imageMso="ReviewCompareTwoVersions" />
<button id="btnPolish" label="润色加工" size="large" onAction="OnPolishClick" imageMso="Spelling" />

View File

@@ -37,7 +37,7 @@ namespace WordAddIn
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
_httpClient = new HttpClient();
_httpClient.Timeout = TimeSpan.FromSeconds(60); // 设置 60 秒超时,防止长文本生成时连接断开
_httpClient.Timeout = TimeSpan.FromSeconds(120); // 设置 120 秒超时,防止生图或长文本生成时连接断开
_httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {ApiKey}");
}
@@ -170,6 +170,24 @@ namespace WordAddIn
return await GetChatCompletion(messages);
}
/// <summary>
/// 总结大纲:将文本总结为层级分明的大纲文本。
/// </summary>
/// <param name="originalText">原文</param>
/// <returns>大纲文本</returns>
public async Task<string> SummarizeToOutline(string originalText)
{
string systemPrompt = "你是一个专业的文档总结助手。请将用户提供的长文本总结为一个层级分明的大纲。要求:1. 结构清晰,使用缩进或序号表示层级;2. 语言精练,概括重点;3. 适合用于制作PPT或架构图。请直接输出大纲文本,不要包含Markdown代码块标记。";
var messages = new List<Message>
{
new Message { role = "system", content = systemPrompt },
new Message { role = "user", content = $"请将以下内容总结为大纲:\n\n{originalText}" }
};
return await GetChatCompletion(messages);
}
/// <summary>
/// 生成大纲:根据主题生成结构化的 JSON 大纲。
/// 功能描述:
@@ -302,14 +320,18 @@ namespace WordAddIn
/// </summary>
/// <param name="prompt">用户的原始描述</param>
/// <param name="style">图片风格 (如"水墨画", "赛博朋克"等)</param>
/// <param name="shouldOptimize">是否需要 AI 优化提示词(默认为 true)</param>
/// <returns>生成的图片 URL (有效期通常较短)</returns>
public async Task<string> GenerateImageUrl(string prompt, string style = null)
public async Task<string> GenerateImageUrl(string prompt, string style = null, bool shouldOptimize = true)
{
try
{
// 1. 优化 Prompt:将用户输入转换为安全的英文绘图 Prompt,并注入风格
// 这一步对于生成高质量图片至关重要,因为绘图模型对英文 Prompt 的理解通常更好
string optimizedPrompt = await OptimizePromptForImage(prompt, style);
// 1. 优化 Prompt:根据 flag 决定是否调用 LLM 进行翻译和优化
string optimizedPrompt = prompt;
if (shouldOptimize)
{
optimizedPrompt = await OptimizePromptForImage(prompt, style);
}
// 使用匿名对象构造请求体,以获得最大灵活性
var requestBody = new
@@ -380,6 +402,9 @@ namespace WordAddIn
/// </summary>
private async Task<string> OptimizePromptForImage(string originalPrompt, string style = null)
{
// 注意:架构图的特殊模板处理已移动到 UI 层 (ImageOptionsForm),
// 这里主要处理需要 AI 翻译和润色的艺术风格。
string styleInstruction = string.IsNullOrEmpty(style) ? "" : $"6. 图片风格必须严格遵循:{style}。";
var messages = new List<Message>

View File

@@ -9,172 +9,213 @@ namespace WordAddIn
/// <summary>
/// 生成配图设置窗体。
/// 功能描述:
/// 1. 允许用户选择图片风格(如写实、卡通、3D渲染等)。
/// 2. 允许用户输入额外的描述(如颜色、背景要求等)。
/// 3. 支持保存上次选择的风格,提升用户体验。
/// 1. 允许用户选择图片风格(包括多种架构图)。
/// 2. 自动根据选择的风格生成提示词模板。
/// 3. 允许用户直接编辑最终发送给 AI 的提示词。
/// </summary>
public class ImageOptionsForm : Form
{
/// <summary>
/// 用户选择的图片风格。
/// 最终生成的提示词(用户编辑后的版本)。
/// </summary>
public string FinalPrompt { get; private set; }
/// <summary>
/// 是否需要 AI 进一步优化提示词(翻译/润色)。
/// 对于架构图通常为 false(直接使用模板),对于艺术画通常为 true。
/// </summary>
public bool ShouldOptimize { get; private set; }
/// <summary>
/// 源文本(从 Word 选区或剪贴板获取)。
/// </summary>
public string SourceText { get; set; }
/// <summary>
/// 用户选择的风格名称(用于后续可能的引用,虽然后端逻辑已主要依赖 FinalPrompt)
/// </summary>
public string SelectedStyle { get; private set; }
/// <summary>
/// 用户输入的补充描述。
/// </summary>
public string AdditionalPrompt { get; private set; }
private ComboBox cmbStyles;
private TextBox txtAdditionalPrompt;
private TextBox txtFinalPrompt;
private CheckBox chkOptimize;
private Button btnOk;
private Button btnCancel;
private Label lblStyle;
private Label lblPrompt;
private readonly string[] _styles = new string[]
{
"写实摄影 (Photorealistic)",
"软件架构图 (Architecture Diagram)",
"技术原理图 (Technical Schematic)",
"手绘草图 (Sketch)",
"卡通插画 (Cartoon)",
"3D 渲染 (3D Render)",
"水彩画 (Watercolor)",
"赛博朋克 (Cyberpunk)"
};
private readonly Dictionary<string, string> _styleTemplates = new Dictionary<string, string>();
public ImageOptionsForm()
{
InitializeTemplates();
InitializeComponent();
InitializeStyles();
}
/// <summary>
/// 初始化窗体组件。
/// </summary>
private void InitializeTemplates()
{
// 基础模板:用于架构图系列
// 注意:{0} 是图表类型,{1} 是内容占位符
string archTemplate =
"帮我绘制{0},必须文字合使用中文,中文一定要清晰可见,不能字体模糊或者创造不存在的汉字!\n" +
"同时要美观,大方。\n\n" +
"内容如下:\n{1}\n\n" +
"根据如下内容创建一个整体上的{0},美观,细节处理仔细,特别需要注意的是文字的准确性,中文不要出现错字或不可识别的乱码!!!" +
"同时,字体除标题使用黑体外,其它一概使用宋体,这样不容易出现字体不完整的情况!!!!";
// 注册所有支持的风格及其处理逻辑
// 架构图类
_styleTemplates.Add("逻辑架构图 (Logical Architecture)", string.Format(archTemplate, "逻辑架构图", "{0}"));
_styleTemplates.Add("业务架构图 (Business Architecture)", string.Format(archTemplate, "业务架构图", "{0}"));
_styleTemplates.Add("应用架构图 (Application Architecture)", string.Format(archTemplate, "应用架构图", "{0}"));
_styleTemplates.Add("数据架构图 (Data Architecture)", string.Format(archTemplate, "数据架构图", "{0}"));
_styleTemplates.Add("技术架构图 (Technical Architecture)", string.Format(archTemplate, "技术架构图", "{0}"));
_styleTemplates.Add("部署架构图 (Deployment Architecture)", string.Format(archTemplate, "部署架构图", "{0}"));
_styleTemplates.Add("思维导图 (Mind Map)", string.Format(archTemplate, "思维导图", "{0}"));
_styleTemplates.Add("流程图 (Flow Chart)", string.Format(archTemplate, "流程图", "{0}"));
_styleTemplates.Add("时序图 (Sequence Diagram)", string.Format(archTemplate, "时序交互图", "{0}"));
_styleTemplates.Add("实施保障图 (Implementation & Safeguard Diagram)", string.Format(archTemplate, "实施保障图", "{0}"));
_styleTemplates.Add("逐步进化路线图 (Evolutionary Roadmap)", string.Format(archTemplate, "逐步进化路线图", "{0}"));
// 艺术风格类 (Value 为 null 表示使用默认 AI 优化逻辑)
_styleTemplates.Add("写实摄影 (Photorealistic)", null);
_styleTemplates.Add("卡通插画 (Cartoon)", null);
_styleTemplates.Add("手绘草图 (Sketch)", null);
_styleTemplates.Add("3D 渲染 (3D Render)", null);
_styleTemplates.Add("水彩画 (Watercolor)", null);
_styleTemplates.Add("赛博朋克 (Cyberpunk)", null);
}
private void InitializeComponent()
{
this.lblStyle = new System.Windows.Forms.Label();
this.cmbStyles = new System.Windows.Forms.ComboBox();
this.lblPrompt = new System.Windows.Forms.Label();
this.txtAdditionalPrompt = new System.Windows.Forms.TextBox();
this.btnOk = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// lblStyle
//
this.lblStyle.AutoSize = true;
this.lblStyle.Location = new System.Drawing.Point(30, 30);
this.lblStyle.Name = "lblStyle";
this.lblStyle.Size = new System.Drawing.Size(59, 12);
this.lblStyle.TabIndex = 0;
this.lblStyle.Text = "图片风格:";
//
// cmbStyles
//
this.cmbStyles.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cmbStyles.FormattingEnabled = true;
this.cmbStyles.Location = new System.Drawing.Point(30, 55);
this.cmbStyles.Name = "cmbStyles";
this.cmbStyles.Size = new System.Drawing.Size(370, 20);
this.cmbStyles.TabIndex = 1;
//
// lblPrompt
//
this.lblPrompt.AutoSize = true;
this.lblPrompt.Location = new System.Drawing.Point(30, 100);
this.lblPrompt.Name = "lblPrompt";
this.lblPrompt.Size = new System.Drawing.Size(191, 12);
this.lblPrompt.TabIndex = 2;
this.lblPrompt.Text = "补充描述 (可选,例如:背景要白色):";
//
// txtAdditionalPrompt
//
this.txtAdditionalPrompt.Location = new System.Drawing.Point(30, 125);
this.txtAdditionalPrompt.Multiline = true;
this.txtAdditionalPrompt.Name = "txtAdditionalPrompt";
this.txtAdditionalPrompt.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txtAdditionalPrompt.Size = new System.Drawing.Size(370, 60);
this.txtAdditionalPrompt.TabIndex = 3;
//
// btnOk
//
this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnOk.Location = new System.Drawing.Point(210, 210);
this.btnOk.Name = "btnOk";
this.btnOk.Size = new System.Drawing.Size(90, 35);
this.btnOk.TabIndex = 4;
this.btnOk.Text = "生成图片";
this.btnOk.UseVisualStyleBackColor = true;
this.btnOk.Click += new System.EventHandler(this.BtnOk_Click);
//
// btnCancel
//
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(310, 210);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(90, 35);
this.btnCancel.TabIndex = 5;
this.btnCancel.Text = "取消";
this.btnCancel.UseVisualStyleBackColor = true;
//
// ImageOptionsForm
//
this.AcceptButton = this.btnOk;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(450, 261);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOk);
this.Controls.Add(this.txtAdditionalPrompt);
this.Controls.Add(this.lblPrompt);
this.Controls.Add(this.cmbStyles);
this.Controls.Add(this.lblStyle);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Text = "生成配图选项 - 支持编辑提示词";
this.Size = new Size(500, 520);
this.StartPosition = FormStartPosition.CenterParent;
this.FormBorderStyle = FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ImageOptionsForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "生成配图设置";
this.lblStyle = new Label();
this.cmbStyles = new ComboBox();
this.lblPrompt = new Label();
this.txtFinalPrompt = new TextBox();
this.chkOptimize = new CheckBox();
this.btnOk = new Button();
this.btnCancel = new Button();
this.SuspendLayout();
// lblStyle
this.lblStyle.AutoSize = true;
this.lblStyle.Location = new Point(20, 20);
this.lblStyle.Text = "图片风格:";
// cmbStyles
this.cmbStyles.DropDownStyle = ComboBoxStyle.DropDownList;
this.cmbStyles.Location = new Point(20, 45);
this.cmbStyles.Size = new Size(440, 25);
foreach (var key in _styleTemplates.Keys)
{
this.cmbStyles.Items.Add(key);
}
this.cmbStyles.SelectedIndexChanged += CmbStyles_SelectedIndexChanged;
// lblPrompt
this.lblPrompt.AutoSize = true;
this.lblPrompt.Location = new Point(20, 85);
this.lblPrompt.Text = "提示词预览 (您可以直接修改下面的生成指令):";
// txtFinalPrompt
this.txtFinalPrompt.Location = new Point(20, 110);
this.txtFinalPrompt.Multiline = true;
this.txtFinalPrompt.ScrollBars = ScrollBars.Vertical;
this.txtFinalPrompt.Size = new Size(440, 280);
// chkOptimize
this.chkOptimize.AutoSize = true;
this.chkOptimize.Location = new Point(20, 400);
this.chkOptimize.Size = new Size(400, 20);
this.chkOptimize.Text = "使用 AI 优化提示词 (自动翻译成英文并丰富细节)";
this.chkOptimize.Checked = true;
// btnOk
this.btnOk.Text = "开始生成";
this.btnOk.DialogResult = DialogResult.OK;
this.btnOk.Location = new Point(280, 430);
this.btnOk.Size = new Size(90, 30);
this.btnOk.Click += BtnOk_Click;
// btnCancel
this.btnCancel.Text = "取消";
this.btnCancel.DialogResult = DialogResult.Cancel;
this.btnCancel.Location = new Point(380, 430);
this.btnCancel.Size = new Size(80, 30);
this.Controls.Add(this.lblStyle);
this.Controls.Add(this.cmbStyles);
this.Controls.Add(this.lblPrompt);
this.Controls.Add(this.txtFinalPrompt);
this.Controls.Add(this.chkOptimize);
this.Controls.Add(this.btnOk);
this.Controls.Add(this.btnCancel);
this.ResumeLayout(false);
this.PerformLayout();
}
/// <summary>
/// 初始化风格列表,并尝试加载上次保存的风格。
/// </summary>
private void InitializeStyles()
protected override void OnLoad(EventArgs e)
{
cmbStyles.Items.AddRange(_styles);
// 尝试恢复上次的选择
string lastStyle = Settings.Default.LastImageStyle;
if (!string.IsNullOrEmpty(lastStyle) && cmbStyles.Items.Contains(lastStyle))
base.OnLoad(e);
// 默认选中第一个风格(通常是逻辑架构图,如果 keys 顺序不对可能需要指定)
if (this.cmbStyles.Items.Count > 0)
{
cmbStyles.SelectedItem = lastStyle;
// 尝试找到上次选中的或默认逻辑架构图
int index = this.cmbStyles.FindString("逻辑架构图");
this.cmbStyles.SelectedIndex = index >= 0 ? index : 0;
}
else
{
cmbStyles.SelectedIndex = 0; // 默认选中第一个
// Fallback update if no items or default
UpdatePrompt();
}
}
private void CmbStyles_SelectedIndexChanged(object sender, EventArgs e)
{
UpdatePrompt();
}
private void UpdatePrompt()
{
if (cmbStyles.SelectedItem == null) return;
string styleKey = cmbStyles.SelectedItem.ToString();
string template = _styleTemplates.ContainsKey(styleKey) ? _styleTemplates[styleKey] : null;
// 只有当文本框为空,或者文本框内容是上一个模板生成的内容时,才自动覆盖
// 但为了简单起见,这里策略是:只要切换风格,就重置提示词。用户如果修改了,切换风格会丢失修改。
// 这是一个权衡。为了体验更好,可以加个判断,但现在先强制刷新。
if (template != null)
{
// 是架构图类:使用模板
this.txtFinalPrompt.Text = template.Replace("{0}", this.SourceText ?? "");
// 用户要求默认选中 AI 优化
this.chkOptimize.Checked = true;
}
else
{
// 是艺术风格类:直接显示原文本,开启 AI 优化
this.txtFinalPrompt.Text = this.SourceText ?? "";
this.chkOptimize.Checked = true;
}
}
/// <summary>
/// 确定按钮点击事件。
/// 获取用户选择,并保存风格到 Settings。
/// </summary>
private void BtnOk_Click(object sender, EventArgs e)
{
SelectedStyle = cmbStyles.SelectedItem.ToString();
AdditionalPrompt = txtAdditionalPrompt.Text.Trim();
// 保存选择
Settings.Default.LastImageStyle = SelectedStyle;
Settings.Default.Save();
this.FinalPrompt = this.txtFinalPrompt.Text;
this.ShouldOptimize = this.chkOptimize.Checked;
this.SelectedStyle = this.cmbStyles.SelectedItem?.ToString();
}
}
}

View File

@@ -0,0 +1,107 @@
using System;
using System.Windows.Forms;
namespace WordAddIn
{
/// <summary>
/// 大纲总结结果展示窗体。
/// 功能描述:
/// 1. 展示 AI 生成的大纲总结内容。
/// 2. 提供一键复制到剪贴板功能,方便后续生成架构图使用。
/// </summary>
public class OutlineResultForm : Form
{
public string ResultText { get; private set; }
private TextBox txtResult;
private Button btnCopy;
private Button btnClose;
private Label lblHint;
public OutlineResultForm(string text)
{
ResultText = text;
InitializeComponent();
txtResult.Text = text;
}
private void InitializeComponent()
{
this.lblHint = new System.Windows.Forms.Label();
this.txtResult = new System.Windows.Forms.TextBox();
this.btnCopy = new System.Windows.Forms.Button();
this.btnClose = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// lblHint
//
this.lblHint.AutoSize = true;
this.lblHint.Location = new System.Drawing.Point(20, 15);
this.lblHint.Name = "lblHint";
this.lblHint.Size = new System.Drawing.Size(400, 12);
this.lblHint.TabIndex = 0;
this.lblHint.Text = "AI 已将内容总结为以下大纲。请点击“复制”按钮,以便后续生成架构图。";
//
// txtResult
//
this.txtResult.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtResult.Location = new System.Drawing.Point(20, 40);
this.txtResult.Multiline = true;
this.txtResult.Name = "txtResult";
this.txtResult.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.txtResult.Size = new System.Drawing.Size(540, 350);
this.txtResult.TabIndex = 1;
//
// btnCopy
//
this.btnCopy.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnCopy.Location = new System.Drawing.Point(360, 410);
this.btnCopy.Name = "btnCopy";
this.btnCopy.Size = new System.Drawing.Size(100, 30);
this.btnCopy.TabIndex = 2;
this.btnCopy.Text = "复制到剪贴板";
this.btnCopy.UseVisualStyleBackColor = true;
this.btnCopy.Click += new System.EventHandler(this.btnCopy_Click);
//
// btnClose
//
this.btnClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnClose.Location = new System.Drawing.Point(480, 410);
this.btnClose.Name = "btnClose";
this.btnClose.Size = new System.Drawing.Size(80, 30);
this.btnClose.TabIndex = 3;
this.btnClose.Text = "关闭";
this.btnClose.UseVisualStyleBackColor = true;
this.btnClose.Click += new System.EventHandler(this.btnClose_Click);
//
// OutlineResultForm
//
this.ClientSize = new System.Drawing.Size(584, 461);
this.Controls.Add(this.btnClose);
this.Controls.Add(this.btnCopy);
this.Controls.Add(this.txtResult);
this.Controls.Add(this.lblHint);
this.Name = "OutlineResultForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "大纲总结结果";
this.ResumeLayout(false);
this.PerformLayout();
}
private void btnCopy_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(txtResult.Text))
{
Clipboard.SetText(txtResult.Text);
MessageBox.Show("大纲内容已复制到剪贴板!\n现在您可以去使用“生成配图”功能,选择“逻辑架构图”风格来生成架构图了。", "复制成功");
}
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
}
}

View File

@@ -266,6 +266,9 @@
<Compile Include="CreateOutlineForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="OutlineResultForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="OutlineSettingsForm.cs">
<SubType>Form</SubType>
</Compile>

View File

@@ -166,14 +166,14 @@
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="WordAddIn.dll" size="96256">
<dependentAssembly dependencyType="install" allowDelayedBinding="true" codebase="WordAddIn.dll" size="102912">
<assemblyIdentity name="WordAddIn" version="1.0.0.0" language="neutral" processorArchitecture="msil" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>57KGd7UXAGzFPWql99dRDRDZXoe2StLuM7Uyd52MAcU=</dsig:DigestValue>
<dsig:DigestValue>opK7SiQ9dqUcG7Gosdxa7kFJixJFR1aqCz+EqKq90Rw=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
@@ -200,4 +200,4 @@
</vstov4:customizations>
</vstav3:application>
</vstav3:addIn>
<publisherIdentity name="CN=DESKTOP-Q6H7B6L\Administrator" issuerKeyHash="42606c52715d5764c2f9dab5bee6dcd76cc7a67d" /><Signature Id="StrongNameSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>Q59Lub3/7zQPl9a5u6WlazdugvzYLbuMA2ScUeG2Kgc=</DigestValue></Reference></SignedInfo><SignatureValue>e+fTQJmSYA2Ba8atHBYYQHQ3yumSSKoHkFWQhSnBCeAJ3fJdgAe1BT50EjnkKWP6bgL7txi2fDWiqXH7PomA+4D+t9Px5E2mRjSn6TocihjON9kFjatapE5bYrXX4rxZmsa7baDmtRolKjErgeei1cgkLG+00xgJkUDvKwgLaZM=</SignatureValue><KeyInfo Id="StrongNameKeyInfo"><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><msrel:RelData xmlns:msrel="http://schemas.microsoft.com/windows/rel/2005/reldata"><r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:as="http://schemas.microsoft.com/windows/pki/2005/Authenticode"><r:grant><as:ManifestInformation Hash="072ab6e1519c64038cbb2dd8fc826e376ba5a5bbb9d6970f34efffbdb94b9f43" Description="" Url=""><as:assemblyIdentity name="WordAddIn.dll" version="1.0.0.1" publicKeyToken="06a92c46db516926" language="neutral" processorArchitecture="msil" type="win32" /></as:ManifestInformation><as:SignedBy /><as:AuthenticodePublisher><as:X509SubjectName>CN=DESKTOP-Q6H7B6L\Administrator</as:X509SubjectName></as:AuthenticodePublisher></r:grant><r:issuer><Signature Id="AuthenticodeSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>BowY9B2/AdRMLaAmKgcs3z/FtyzUeliTzB6MSGgWv2w=</DigestValue></Reference></SignedInfo><SignatureValue>m1b3Quuv79UlTgmBro71Cl0hJmhy+RrFxAwWuFPtCzZmP7iI7KNCfbMMwSWufjzNYW/VF9ShKMk5nWLC1Q7iujoTWIYyUuiIDawYYrTyK4gO3QgQjE06b5DoluCNz4gENwYt2WJvNGRewiLCIEnDZhpAm/BaMJkSbYAkD22ASIY=</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><X509Data><X509Certificate>MIICDTCCAXagAwIBAgIQJpSlsxfGbpRNgyjD5Q/yDjANBgkqhkiG9w0BAQsFADBFMUMwQQYDVQQDHjoARABFAFMASwBUAE8AUAAtAFEANgBIADcAQgA2AEwAXABBAGQAbQBpAG4AaQBzAHQAcgBhAHQAbwByMB4XDTI2MDEyNDAwMzYxNVoXDTI3MDEyNDA2MzYxNVowRTFDMEEGA1UEAx46AEQARQBTAEsAVABPAFAALQBRADYASAA3AEIANgBMAFwAQQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaECAwEAATANBgkqhkiG9w0BAQsFAAOBgQC3GjWMhEFFrn9PGYrQVGNAaibG1sR/eRX3ZWNRjYLhiqbsdeHvm4CX/W0EWd9yZlbaej87XyeUbX+mC3q3yMFVPCRn/W65WYyBPbWTWmSfU9VLKKULAH6WqjS7CqEU3cQSuKcU6nYG4AJu2/FkQJaA82tr3pvcQD28HmOlDeNh0Q==</X509Certificate></X509Data></KeyInfo></Signature></r:issuer></r:license></msrel:RelData></KeyInfo></Signature></asmv1:assembly>
<publisherIdentity name="CN=DESKTOP-Q6H7B6L\Administrator" issuerKeyHash="42606c52715d5764c2f9dab5bee6dcd76cc7a67d" /><Signature Id="StrongNameSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>qit2kD2zs+ShAnH0i1668jnenJLrkB7hu+wiVm45iqg=</DigestValue></Reference></SignedInfo><SignatureValue>lAH5ZUPogQCgWwdpfhRH4tv+uGhG6G7VkPX9Ya++V0axm6kr4GDGcTsS+QkX+ctsY9DZsFef8FooFSJrV2IX2tosaFZt7f4TIs2JgOBRVgLxSYs+QacG/aRhMzsl3g5e8QPCF0j+/drHrtK+DFAambYV2UcbU0Wu/p/KPbXBCEM=</SignatureValue><KeyInfo Id="StrongNameKeyInfo"><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><msrel:RelData xmlns:msrel="http://schemas.microsoft.com/windows/rel/2005/reldata"><r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:as="http://schemas.microsoft.com/windows/pki/2005/Authenticode"><r:grant><as:ManifestInformation Hash="a88a396e5622ecbbe11e90eb929cde39f2ba5e8bf47102a1e4b3b33d90762baa" Description="" Url=""><as:assemblyIdentity name="WordAddIn.dll" version="1.0.0.1" publicKeyToken="06a92c46db516926" language="neutral" processorArchitecture="msil" type="win32" /></as:ManifestInformation><as:SignedBy /><as:AuthenticodePublisher><as:X509SubjectName>CN=DESKTOP-Q6H7B6L\Administrator</as:X509SubjectName></as:AuthenticodePublisher></r:grant><r:issuer><Signature Id="AuthenticodeSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>cQ+XFSDPlMtb8zYjSzOcudEMYwxmXeQ3CaeHduxOKFA=</DigestValue></Reference></SignedInfo><SignatureValue>juCXR/mToOVD5qLmdm5mhw6eMV82cFLlHY7r6DbZQF7ZJifsMTls4/HMYErjnDskobZDavRqL95lmRGFA2vMs/a6RrD+35/eT1DoFa+6RYmPsKIT4X3v/K9Yejaac9QvMiPpYLzvaPb6VdBaH2i4ZI2vVb9UZFmQtLivy/zrfGs=</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><X509Data><X509Certificate>MIICDTCCAXagAwIBAgIQJpSlsxfGbpRNgyjD5Q/yDjANBgkqhkiG9w0BAQsFADBFMUMwQQYDVQQDHjoARABFAFMASwBUAE8AUAAtAFEANgBIADcAQgA2AEwAXABBAGQAbQBpAG4AaQBzAHQAcgBhAHQAbwByMB4XDTI2MDEyNDAwMzYxNVoXDTI3MDEyNDA2MzYxNVowRTFDMEEGA1UEAx46AEQARQBTAEsAVABPAFAALQBRADYASAA3AEIANgBMAFwAQQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaECAwEAATANBgkqhkiG9w0BAQsFAAOBgQC3GjWMhEFFrn9PGYrQVGNAaibG1sR/eRX3ZWNRjYLhiqbsdeHvm4CX/W0EWd9yZlbaej87XyeUbX+mC3q3yMFVPCRn/W65WYyBPbWTWmSfU9VLKKULAH6WqjS7CqEU3cQSuKcU6nYG4AJu2/FkQJaA82tr3pvcQD28HmOlDeNh0Q==</X509Certificate></X509Data></KeyInfo></Signature></r:issuer></r:license></msrel:RelData></KeyInfo></Signature></asmv1:assembly>

View File

@@ -7,15 +7,15 @@
<framework targetVersion="4.7.2" profile="Full" supportedRuntime="4.0.30319" />
</compatibleFrameworks>
<dependency>
<dependentAssembly dependencyType="install" codebase="WordAddIn.dll.manifest" size="14626">
<dependentAssembly dependencyType="install" codebase="WordAddIn.dll.manifest" size="14627">
<assemblyIdentity name="WordAddIn.dll" version="1.0.0.1" publicKeyToken="06a92c46db516926" language="neutral" processorArchitecture="msil" type="win32" />
<hash>
<dsig:Transforms>
<dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" />
</dsig:Transforms>
<dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" />
<dsig:DigestValue>kQ6lvB1J+RPqWmN3TV1FKCJZwSRY6p4lkcGyY6yVSYM=</dsig:DigestValue>
<dsig:DigestValue>I1vKeiF4MhMscqYaDoQyOhwm/n7ejlXLDPofhX5hyfw=</dsig:DigestValue>
</hash>
</dependentAssembly>
</dependency>
<publisherIdentity name="CN=DESKTOP-Q6H7B6L\Administrator" issuerKeyHash="42606c52715d5764c2f9dab5bee6dcd76cc7a67d" /><Signature Id="StrongNameSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>nO4LOJBDcGxL8l8R9b9+yIX5TXJ4Ym9VOMcF/Sry+qw=</DigestValue></Reference></SignedInfo><SignatureValue>ZXK46Htr5iGt1kgI+VOKE9t9CPf3Xfkp16PHJxaK38qkTVXu/oylz4UUYGk/Tf1JuEkuQq06zN6CYCma0rwL4Gyoo/5n09Xzg3zmriPEIS2cs8BPbXwH90FbQ0HDaPVM+dJ9A8c+KTH9h6zNm8aj/HQdBRamLUv1D2PBxk7NE1s=</SignatureValue><KeyInfo Id="StrongNameKeyInfo"><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><msrel:RelData xmlns:msrel="http://schemas.microsoft.com/windows/rel/2005/reldata"><r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:as="http://schemas.microsoft.com/windows/pki/2005/Authenticode"><r:grant><as:ManifestInformation Hash="acfaf22afd05c738556f6278724df985c87ebff5115ff24b6c704390380bee9c" Description="" Url=""><as:assemblyIdentity name="WordAddIn.vsto" version="1.0.0.1" publicKeyToken="06a92c46db516926" language="neutral" processorArchitecture="msil" xmlns="urn:schemas-microsoft-com:asm.v1" /></as:ManifestInformation><as:SignedBy /><as:AuthenticodePublisher><as:X509SubjectName>CN=DESKTOP-Q6H7B6L\Administrator</as:X509SubjectName></as:AuthenticodePublisher></r:grant><r:issuer><Signature Id="AuthenticodeSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>9TyNXNxi0FyDrOMgoJ3zDQERhOeW01TflRltAh+X1k8=</DigestValue></Reference></SignedInfo><SignatureValue>DHwRL4z0MQqHXYXDBnMyS39H5LqOPVJmaNB+zmQ+YoMUdVQojZBKuqSvpw3WvvWLhmP5dAH92Q94xrTd0gGggHPmL2r5/puOuDzYIhrvSXhE5dVoUwv8GW5Lem+FjDcAYn6TFic2CEkvwOE9FKEfT92ijcaa4K8AEWPm8X64EKg=</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><X509Data><X509Certificate>MIICDTCCAXagAwIBAgIQJpSlsxfGbpRNgyjD5Q/yDjANBgkqhkiG9w0BAQsFADBFMUMwQQYDVQQDHjoARABFAFMASwBUAE8AUAAtAFEANgBIADcAQgA2AEwAXABBAGQAbQBpAG4AaQBzAHQAcgBhAHQAbwByMB4XDTI2MDEyNDAwMzYxNVoXDTI3MDEyNDA2MzYxNVowRTFDMEEGA1UEAx46AEQARQBTAEsAVABPAFAALQBRADYASAA3AEIANgBMAFwAQQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaECAwEAATANBgkqhkiG9w0BAQsFAAOBgQC3GjWMhEFFrn9PGYrQVGNAaibG1sR/eRX3ZWNRjYLhiqbsdeHvm4CX/W0EWd9yZlbaej87XyeUbX+mC3q3yMFVPCRn/W65WYyBPbWTWmSfU9VLKKULAH6WqjS7CqEU3cQSuKcU6nYG4AJu2/FkQJaA82tr3pvcQD28HmOlDeNh0Q==</X509Certificate></X509Data></KeyInfo></Signature></r:issuer></r:license></msrel:RelData></KeyInfo></Signature></asmv1:assembly>
<publisherIdentity name="CN=DESKTOP-Q6H7B6L\Administrator" issuerKeyHash="42606c52715d5764c2f9dab5bee6dcd76cc7a67d" /><Signature Id="StrongNameSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>CPGOApeLUsS3acxFelGymvNVWFUcCBuAjIl9aDADJ+Y=</DigestValue></Reference></SignedInfo><SignatureValue>UXQ+gP7XRrId28tB/3aBIK28hJTR+HvorvhHTQ8XW/hjmvvgaPhinIPSVjH982bbZx3W+KNqKHf00JQjhctW+KC+WGNgELwjeSw1ZBjhWl7RaMO6l9HQi0Tvjt7G2idttnbbZifsKf+mv1ceF5QroYURI0bp32rTH3QavazE/oc=</SignatureValue><KeyInfo Id="StrongNameKeyInfo"><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><msrel:RelData xmlns:msrel="http://schemas.microsoft.com/windows/rel/2005/reldata"><r:license xmlns:r="urn:mpeg:mpeg21:2003:01-REL-R-NS" xmlns:as="http://schemas.microsoft.com/windows/pki/2005/Authenticode"><r:grant><as:ManifestInformation Hash="e6270330687d898c801b081c555855f39ab2517a45cc69b7c4528b97028ef108" Description="" Url=""><as:assemblyIdentity name="WordAddIn.vsto" version="1.0.0.1" publicKeyToken="06a92c46db516926" language="neutral" processorArchitecture="msil" xmlns="urn:schemas-microsoft-com:asm.v1" /></as:ManifestInformation><as:SignedBy /><as:AuthenticodePublisher><as:X509SubjectName>CN=DESKTOP-Q6H7B6L\Administrator</as:X509SubjectName></as:AuthenticodePublisher></r:grant><r:issuer><Signature Id="AuthenticodeSignature" xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha256" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha256" /><DigestValue>uv+SjBSA0U/yAogolAQpL/jvpJgCboKXI7ngcMLDZ6g=</DigestValue></Reference></SignedInfo><SignatureValue>SRkSyDSS8w4TR/CohjvR0SbmQ+N8KVSZC96LfgKyO6YYQ550v5/7lBIJeSlE+AaDooR88jBCkiuy0guBgOk2OiO0aLeRA6wtWtxGmOEX70SiRXJiysEUiMV8Es6MZ82IN/ZIoesbmlzeQP6y+BVg3Bry++gSpW9VkBJgCg0eSAg=</SignatureValue><KeyInfo><KeyValue><RSAKeyValue><Modulus>23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue><X509Data><X509Certificate>MIICDTCCAXagAwIBAgIQJpSlsxfGbpRNgyjD5Q/yDjANBgkqhkiG9w0BAQsFADBFMUMwQQYDVQQDHjoARABFAFMASwBUAE8AUAAtAFEANgBIADcAQgA2AEwAXABBAGQAbQBpAG4AaQBzAHQAcgBhAHQAbwByMB4XDTI2MDEyNDAwMzYxNVoXDTI3MDEyNDA2MzYxNVowRTFDMEEGA1UEAx46AEQARQBTAEsAVABPAFAALQBRADYASAA3AEIANgBMAFwAQQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA23ghUI75yy8GcLhPT5yA+v2ssRfSW+chNqMI+pq5OAr7RXQJOt/+bHdoT9NoS9GQkvblc7ekoUNShIcN601ZZOPgAxkXaQS+La14Wp8GOwnM1qHNJwgla4VAIYjmCj3CUMXLsxspOFVZKRnB6/idYku4Gzhc7NjRBAwe8qWBXaECAwEAATANBgkqhkiG9w0BAQsFAAOBgQC3GjWMhEFFrn9PGYrQVGNAaibG1sR/eRX3ZWNRjYLhiqbsdeHvm4CX/W0EWd9yZlbaej87XyeUbX+mC3q3yMFVPCRn/W65WYyBPbWTWmSfU9VLKKULAH6WqjS7CqEU3cQSuKcU6nYG4AJu2/FkQJaA82tr3pvcQD28HmOlDeNh0Q==</X509Certificate></X509Data></KeyInfo></Signature></r:issuer></r:license></msrel:RelData></KeyInfo></Signature></asmv1:assembly>

View File

@@ -1 +1 @@
3849c9896302f552ebedc5a2387b042475bb844b34c63a462d94d975303dd317
8be011f4fbaa7c6c228af0678a568daed0783ec95bd0f02e2c98071ea79ec1db