界面组件DevExpress Office File API - 如何用OpenAI增强文档可访问性(二)

DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库,不用安装Microsoft Office,就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CSV 和 Snap Report等企业级文件。

在我们上一篇与AI相关的文章中(点击这里回顾>>),描述了如何使用DevExpress Office File API库和Azure AI OpenAI服务的可访问性)为图像和图表生成AltText(有意义的描述)。在这篇文章中,我们将解释如何为Word和Excel文件生成超链接描述。

当您生成可访问的Word或Excel文档时,创建带有有意义的屏幕提示的超链接是必不可少的,有意义的屏幕提示可以帮助有视觉障碍的人或使用屏幕阅读器的人理解超链接的目的,增加清晰度,并增强文档导航。此外,当您将文档导出为可访问的PDF格式(与可访问性标准(WCAG)保持一致)时,超链接屏幕提示非常重要。在DevExpress Word Processing Document API 和 Spreadsheet Document API库的帮助下,您可以定位不提供可访问描述的文档超链接,并使用OpenAI模型生成这些描述。

获取DevExpress Office File API正式版下载(Q技术交流:532598169)

我们在GitHub上的示例项目中为该功能添加了两个新的端点:Office File API – Integrate AI to Generate Accessible Descriptions,接下来将在下面详细介绍实现步骤……

实现OpenAI模型API

注意:在您将此解决方案纳入应用程序之前,请务必阅读并理解OpenAI的许可协议和使用条款。

这一步类似于我们在之前的AI相关文章中演示过得步骤,在您的项目中安装Azure.AI.OpenAI NuGet包,并使用OpenAI api发送请求。

这个代码片段发送一个请求来描述一个超链接URI,并获得一个带有响应的字符串。

public class OpenAIClientHyperlinkHelper
{
OpenAIClient client;
internal OpenAIClientHyperlinkHelper(string openAIApiKey)
{
client = new OpenAIClient(openAIApiKey, new OpenAIClientOptions());
}
internal async Task<string> DescribeHyperlinkAsync(string link)
{
ChatCompletionsOptions chatCompletionsOptions = new()
{
DeploymentName = "gpt-4-vision-preview",
Messages =
{
new ChatRequestSystemMessage("You are a helpful assistant that describes hyperlinks."),
new ChatRequestUserMessage(
new ChatMessageTextContentItem("Give a description for this hyperlink URI in 10-20 words"),
new ChatMessageTextContentItem(link))
},
MaxTokens = 300
};

Response<ChatCompletions> chatResponse = await client.GetChatCompletionsAsync(chatCompletionsOptions);
ChatChoice choice = chatResponse.Value.Choices[0];
return choice.Message.Content;
}
}
Word Processing Document API端点

要在DevExpress支持的Word Processing Document API应用程序中使用上述API,请访问Document.Hyperlinks集合来检索文档超链接。检查文档超链接是否包含提示(Hyperlink.ToolTip 属性值不应为空或等于Hyperlink.NavigateUri值),否则调用OpenAIClientHyperlinkHelper.DescribeHyperlinkAsync方法生成超链接描述信息。

public async Task<IActionResult> GenerateHyperlinkDescriptionForWord(IFormFile documentWithHyperlinks, [FromQuery] RichEditFormat outputFormat)
{
try
{
var hyperlinkHelper = new OpenAIClientHyperlinkHelper(openAIApiKey);
using (var wordProcessor = new RichEditDocumentServer())
{
await RichEditHelper.LoadFile(wordProcessor, documentWithHyperlinks);

wordProcessor.IterateSubDocuments(async (document) =>
{
foreach (var hyperlink in document.Hyperlinks)
{
if (string.IsNullOrEmpty(hyperlink.ToolTip) || hyperlink.ToolTip == hyperlink.NavigateUri)
{
hyperlink.ToolTip = hyperlinkHelper.DescribeHyperlinkAsync(hyperlink.NavigateUri).Result;
}
}
});
Stream result = RichEditHelper.SaveDocument(wordProcessor, outputFormat);
string contentType = RichEditHelper.GetContentType(outputFormat);
string outputStringFormat = outputFormat.ToString().ToLower();
return File(result, contentType, $"result.{outputStringFormat}");
}
}
catch (Exception e)
{
return StatusCode(500, e.Message + Environment.NewLine + e.StackTrace);
}
}

下图显示了使用此代码生成的超链接描述。

界面组件DevExpress Office File API - 如何用OpenAI增强文档可访问性(二)

Spreadsheet Document API端点

对于DevExpress支持的Spreadsheet Document API应用程序,迭代文档工作表并使用Worksheet.Hyperlinks集合访问工作表超链接,完成后,必须确定Hyperlink.TooltipText 属性是否满足条件,并调用OpenAIClientHyperlinkHelper. DescribeHyperlinkAsync方法,在需要时生成超链接描述。

public async Task<IActionResult> GenerateHyperlinkDescriptionForSpreadsheet(IFormFile documentWithHyperlinks, [FromQuery] SpreadsheetFormat outputFormat)
{
try
{
var hyperlinkHelper = new OpenAIClientHyperlinkHelper(openAIApiKey);
using (var workbook = new Workbook())
{
await SpreadsheetHelper.LoadWorkbook(workbook, documentWithHyperlinks);

foreach (var worksheet in workbook.Worksheets)
{
foreach (var hyperlink in worksheet.Hyperlinks)
{
if(hyperlink.IsExternal && (string.IsNullOrEmpty(hyperlink.TooltipText) || hyperlink.TooltipText == hyperlink.Uri))
hyperlink.TooltipText = hyperlinkHelper.DescribeHyperlinkAsync(hyperlink.Uri).Result;
}
}

Stream result = SpreadsheetHelper.SaveDocument(workbook, outputFormat);
string contentType = SpreadsheetHelper.GetContentType(outputFormat);
string outputStringFormat = outputFormat.ToString().ToLower();
return File(result, contentType, $"result.{outputStringFormat}");
}
}
catch (Exception e)
{
return StatusCode(500, e.Message + Environment.NewLine + e.StackTrace);
}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/707485.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习500问——Chapter10:迁移学习(4)

文章目录 11.3.8 流形学习方法 11.3.9 什么是finetune 11.3.10 finetune为什么有效 11.3.11 什么是网络自适应 11.3.12 GAN在迁移学习中的应用 参考文献 11.3.8 流形学习方法 什么是流行学习&#xff1f; 流行学习自从2000年在Science上被提出来以后&#xff0c;就成为了机器…

webstorm yarn环境配置

1. 安装nodejs https://nodejs.cn/download/ 2. 安装npm npm i yarn -g3.下载并安装webstorm https://www.jetbrains.com/webstorm/ 4. 打开settings确认node和yarn的配置正确5. 打开项目更新包 yarn install

IntelliJ IDEA 用maven创建web项目

前言 已经安装并配置好Tomcat。具体步骤&#xff1a;Tomcat安装及环境变量配置(一看就会)-CSDN博客​编辑https://blog.csdn.net/longyongyyds/article/details/135825647 具体步骤 1.新建一个maven项目 2&#xff0c;配置好tomcat服务器 3.运行测试一下 maven教程&#xf…

Redisson原理解析

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

2024大交通场景空间策展洞察报告

来源&#xff1a;邻汇吧&万一商管 近期历史回顾&#xff1a; 2024国内工商业储能市场研究报告.pdf 2023幸福企业白皮书.pdf 2024年欧亚地区移动经济报告.pdf 内容供应链变革 2023人工智能与首席营销官&#xff08;CMO&#xff09; AI科技对PC产业的影响.pdf 金融业数据应用…

Vitis HLS 学习笔记--Vitis Accelerated Libraries介绍

1. 简介 Vitis Accelerated Libraries&#xff0c;包含很多现成的库&#xff0c;这些库都是开源的&#xff0c;也就是说代码是公开的&#xff0c;而且已经优化过&#xff0c;可以让程序运行得更快。你不需要改变太多你的代码&#xff0c;就能让你的程序速度提升。 这些库有很…

2024年GIS大赛奖金盘点,看看哪家最香?

之前盘点过2024年值得参加的GIS比赛&#xff0c;点这里回顾。 今天我们重点盘点一下不同比赛的奖项设置和奖金&#xff0c;排名不分先后。 全国高校GlS技能大赛 1. 比赛介绍&#xff1a; http://contest.gisera.com/view_191.html 2. 奖项/奖金设置&#xff1a; 获奖者颁…

ListView的使用

&#x1f4d6;ListView的使用 ✅1. 创建ListView✅2. 创建适配器Adapter✅3. 开始渲染数据 主要3步骤&#xff1a; 创建ListView 创建适配器Adapter&#xff0c;和Adapter对应的视图 开始渲染数据 效果图&#xff1a; ✅1. 创建ListView 例如现有DemoActivity页面&#xf…

自动控制:滑模控制(Sliding Mode Control, SMC)

自动控制&#xff1a;滑模控制(Sliding Mode Control, SMC) 滑模控制&#xff08;Sliding Mode Control, SMC&#xff09;是一种在处理非线性系统时非常有效的控制技术。它通过驱动系统状态达到并保持在特定的滑模面附近&#xff0c;来实现控制目标。本文将介绍滑模控制的基本…

四川赤橙宏海商务信息咨询有限公司靠谱吗?

在数字化浪潮席卷而来的今天&#xff0c;电商行业正经历着前所未有的变革。四川赤橙宏海商务信息咨询有限公司&#xff0c;凭借其深厚的行业经验和敏锐的市场洞察力&#xff0c;专注于抖音电商服务领域&#xff0c;致力于为广大商家提供全方位、高效益的电商解决方案。 赤橙宏…

OpenGL3.3_C++_Windows(3)

GLSL Shader基础 Shader&#xff08;把输入转化为输出,运行在GPU上&#xff09;&#xff1a;首先要声明版本&#xff0c;有各自的入口点main&#xff08;&#xff09;顶点数据上限:16个包含4分量&#xff1a;16 * 4 64个分量向量&#xff1a;容器vec。使用.x、.y、.z和.w&am…

算法day27

第一题 515. 在每个树行中找最大值 首先是遍历每层的节点&#xff0c;将每一层最大值的节点的值保留下来&#xff0c;最后将所有层的最大值的表返回&#xff1b;具体的遍历每层节点的过程如上一篇故事&#xff1b; 综上所述&#xff0c;代码如下&#xff1a; /*** Definition …

HTML静态网页成品作业(HTML+CSS)—— 零食商城网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

同三维T80005EH4 H.265 4路高清HDMI编码器

同三维T80005EH4 H.265 4路高清HDMI编码器 4路HDMI输入2路3.5音频输入&#xff0c;第1路和第2路HDMI可支持4K30&#xff0c;其它支持高清1080P60 产品简介&#xff1a; 同三维T80005EH4 4路HDMI高清H.265编码器采用最新高效H.265高清数字视频压缩技术&#xff0c;具备稳定…

SQL Server 2022 RTM 最新累积更新:Cumulative Update #13 for SQL Server 2022 RTM

SQL Server 2022 RTM (最新累积更新) - 基于 Azure 的持续性能和安全创新 Cumulative Update #13 for SQL Server 2022 RTM 请访问原文链接&#xff1a;https://sysin.org/blog/sql-server-2022/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&…

C++笔记:模板

模板 为什么要学习模板编程 在学习模板之前&#xff0c;一定要有算法及数据结构的基础&#xff0c;以及重载&#xff0c;封装&#xff0c;多态&#xff0c;继承的基础知识&#xff0c;不然会出现看不懂&#xff0c;或者学会了没办法使用。 为什么C会有模板&#xff0c;来看下面…

听说前端都是切图仔,所以学了PS

PS 从零开始-基础篇 什么话都不想说了&#xff0c;前端以死后端已死&#xff0c;毁灭即是新生&#xff0c;我要开始追梦了&#xff0c; 从小就希望&#xff0c;制作一款自己的游戏&#x1f3ae;去学了编程&#xff0c;了解了&#xff1a;Java、C#、前端... 不小心入了web领域…

idea 配置文件中文乱码

再进行springboot项目开发时发现新建的配置文件中文注释乱码&#xff0c;如下: 处理办法: 1、打开idea&#xff0c;在 File 中找到 Settings,如下图 2、搜索 encodings 找到 File Encodings&#xff0c;如下图 3、将上图中圈上的地方全部改为 UTF-8 编码最后点击 Apply 应用即…

10 SpringBoot 静态资源访问

我们在开发Web项目的时候&#xff0c;往往会有很多静态资源&#xff0c;如html、图片、css等。那如何向前端返回静态资源呢&#xff1f; 以前做过web开发的同学应该知道&#xff0c;我们以前创建的web工程下面会有一个webapp的目录&#xff0c;我们只要把静态资源放在该目录下…

后端跨域问题的处理

问题描述 在做前后端分离的项目时&#xff0c;很有可能会遇到这样一种情况&#xff1a; 就是在游览器中请求后端的接口&#xff0c;出现了 CORS error 错误 报错信息如下&#xff1a; Access to XMLHttpRequest at http://localhost:8860/user/auth/login from origin http:…