'commit'
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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": ""
|
||||
|
||||
@@ -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": ""
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
107
WordAddIn/WordAddIn/OutlineResultForm.cs
Normal file
107
WordAddIn/WordAddIn/OutlineResultForm.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
Binary file not shown.
@@ -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>
|
||||
Binary file not shown.
@@ -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>
|
||||
@@ -1 +1 @@
|
||||
3849c9896302f552ebedc5a2387b042475bb844b34c63a462d94d975303dd317
|
||||
8be011f4fbaa7c6c228af0678a568daed0783ec95bd0f02e2c98071ea79ec1db
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user