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

发布时间:2026/7/14 13:39:12
界面组件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新旧版本帮助文档下载可进QQ qun获取169725316我们在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 Taskstring 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 }; ResponseChatCompletions 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 TaskIActionResult 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); } }下图显示了使用此代码生成的超链接描述。Spreadsheet Document API端点对于DevExpress支持的Spreadsheet Document API应用程序迭代文档工作表并使用Worksheet.Hyperlinks集合访问工作表超链接完成后必须确定Hyperlink.TooltipText 属性是否满足条件并调用OpenAIClientHyperlinkHelper. DescribeHyperlinkAsync方法在需要时生成超链接描述。public async TaskIActionResult 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); } }

相关新闻

经营分析会必看:从收入到利润,8个指标拆清企业经营质量

经营分析会必看:从收入到利润,8个指标拆清企业经营质量

很多公司的经营分析会,开着开着就变成了“报数会”。销售汇报收入完成率,财务汇报利润变化,各部门汇报费用执行。数字讲了一轮,老板最后还是会问:公司经营到底好不好?问题出在哪里?下一步怎么改…

发布时间:2026/7/14 13:39:12
别拿“某网站的安全建设方案”当遮羞布,这钱烧得我心梗

别拿“某网站的安全建设方案”当遮羞布,这钱烧得我心梗

说实话,看到那些拿着几十万预算却还在用免费开源软件凑数的甲方爸爸,我真是气得想摔键盘。咱们今天不聊虚的,就聊聊怎么让你的某网站的安全建设方案真正落地,而不是变成一份用来应付审计的PPT垃圾。很多老板觉得,买个防火墙、装个杀毒软件就万事大吉了。大错特错!去年我经…

发布时间:2026/7/14 13:38:38
网站建设购买数据库的流程,别被坑了!老站长血泪总结

网站建设购买数据库的流程,别被坑了!老站长血泪总结

本文关键词:网站建设购买数据库的流程说实话,每次看到新手小白问“怎么买数据库”这种问题,我就想笑。这年头,谁还自己买服务器装MySQL啊?除非你是搞研究的或者极度极客,否则对于绝大多数做企业官网、电商小程序或者内容站的人来说,折腾数据库简直就是给自己找罪受。但我…

发布时间:2026/7/14 13:36:51
网站建设服务器域名:别再花冤枉钱买垃圾配置了,听句劝

网站建设服务器域名:别再花冤枉钱买垃圾配置了,听句劝

网站打开慢得像蜗牛,客户刚进页面就关掉。这种尴尬场面,你是不是也经历过?上周帮朋友老张救火,他的电商站崩了。明明花了大几千做的页面,加载要8秒。老张急得满头大汗,问我是不是代码写烂了。我一看后台,好家伙,服务器配置低得可怜。用的还是几年前的共享主机,带宽只有…

发布时间:2026/7/14 14:46:00
做信息网站建设预算到底要花多少钱?别被忽悠,听听过来人的大实话

做信息网站建设预算到底要花多少钱?别被忽悠,听听过来人的大实话

说实话,第一次听到“信息网站建设预算”这几个字的时候,我整个人都是懵的。那时候我刚创业,手里攥着那点可怜的启动资金,心里既兴奋又焦虑。我想做个网站,哪怕是个简单的展示型,结果去问了几家所谓的“专业公司”,报价从五千到五万不等,简直把我吓出一身冷汗。后来我才…

发布时间:2026/7/14 14:44:04
福州网站建设方案怎么避坑?老运营掏心窝子分享,帮你省下几万冤枉钱

福州网站建设方案怎么避坑?老运营掏心窝子分享,帮你省下几万冤枉钱

很多老板一听到要做网站,第一反应就是去淘宝或者找那种报价几千块的模板公司。结果呢?网站上线了,打开速度慢得像蜗牛,手机端显示错位,搜索引擎根本搜不到,最后钱花了,事儿没办成,还落得个心里憋屈。我在这行摸爬滚打这么多年,见过太多因为不懂行而被坑的案例。今天不…

发布时间:2026/7/14 14:43:41
别瞎折腾了!建设全网营销型网站才是中小企业救命稻草

别瞎折腾了!建设全网营销型网站才是中小企业救命稻草

看着后台那可怜的几百个访客,心里真不是滋味。真的,太憋屈了。你花大价钱搞了个官网,设计得高大上,代码写得那叫一个漂亮。结果呢?没人看。就像你在深山老林里开了家米其林餐厅,装修豪华,厨师是大厨。但路都没人知道,你饿死在店里。这就是现状。很多老板跟我抱怨,说现…

发布时间:2026/7/14 14:41:32
别再被坑了!揭秘网站建设教育平台的真实成本与那些没人告诉你的坑

别再被坑了!揭秘网站建设教育平台的真实成本与那些没人告诉你的坑

本文关键词:网站建设教育平台前阵子有个做职业培训的哥们儿找我吐槽,说之前找的那家外包公司做的教育平台,上线不到一个月就崩了两次,客服系统还经常漏单。他气得直拍大腿,说早知道这样,当初就不贪便宜找那种报价几千块的模板站。这事儿其实挺典型的,很多老板在做网站建…

发布时间:2026/7/14 14:41:15
别被忽悠了!网站微信建设运维经验分享图揭秘,看完省下几万块冤枉钱

别被忽悠了!网站微信建设运维经验分享图揭秘,看完省下几万块冤枉钱

你是不是刚被报价单吓退?明明只是个展示型官网加个公众号,对方张口就要五万?别急着掏钱,这水太深。今天我就把压箱底的干货掏出来,让你一眼看穿那些不靠谱的建站套路,少花冤枉钱,多办实在事。先说个大实话。很多老板觉得找个大学生或者刚毕业的设计师,便宜又听话。结果…

发布时间:2026/7/14 14:40:27
别被忽悠了!襄阳网络公司 网站建设 避坑指南:500块和5000块的真相

别被忽悠了!襄阳网络公司 网站建设 避坑指南:500块和5000块的真相

很多老板在找襄阳网络公司 网站建设 的时候,第一句话总是问:“做官网多少钱?”这时候如果你直接报个价,十有八九要挨骂。要么觉得你贵,要么觉得你便宜没好货。我在襄阳这行混了快十年,见过太多因为贪便宜最后网站打不开、数据泄露、甚至被扣尾款的案例。今天我不讲虚的,…

发布时间:2026/7/14 0:00:06
揭秘2024最大网站建设公司排名,小白避坑指南

揭秘2024最大网站建设公司排名,小白避坑指南

别再看那些所谓的“全球十大”榜单了。全是花钱买的广告位。你信了,你就输了。很多老板找公司建站,最后钱花了,网站还打不开。这不仅仅是技术问题,更是信息不对称的陷阱。今天我不讲虚的,直接告诉你怎么挑。毕竟,在“最大网站建设公司排名”里,最大的往往不是最好的。而…

发布时间:2026/7/14 0:00:44
别被那些吹上天的教程骗了,phpstudy建设网站视频教程里没人告诉你的三个血泪坑

别被那些吹上天的教程骗了,phpstudy建设网站视频教程里没人告诉你的三个血泪坑

本文关键词:phpstudy建设网站视频教程说实话,现在网上搜“phpstudy建设网站视频教程”,出来的东西真是一言难尽。要么就是几年前的老版本录屏,要么就是那种为了骗点击量,标题起得惊天动地,内容全是废话的营销号。我自己在本地搭环境的时候,也踩过不少坑,今天就不整那些…

发布时间:2026/7/14 0:02:45
别装了,你的学院网站建设推进会就是场大型尴尬现场

别装了,你的学院网站建设推进会就是场大型尴尬现场

看着后台那点可怜的访问量,你急不急?方案改了八版,还是没人看。今天这文,只说怎么把会开成,把事做成。上周去隔壁职院蹭会,那场面,真叫一个窒息。会议室里坐满了人,领导在台上讲PPT,底下的人不是在玩手机,就是在发呆。投影仪闪了两下,灭了。没人去修,接着讲。这种会…

发布时间:2026/7/14 8:24:42
七彩建设集团官方网站怎么找?避坑指南与真实体验分享

七彩建设集团官方网站怎么找?避坑指南与真实体验分享

找官网找得头大?这篇直接告诉你怎么辨别真伪,别被假网站坑了钱。昨天半夜两点,我还在电脑前盯着屏幕,心里那个急啊。家里装修刚进场,工长突然说需要确认一份材料清单,说是七彩建设那边要求的。我手忙脚乱地打开浏览器,搜了一堆“七彩建设”,结果出来一堆广告,什么“七…

发布时间:2026/7/14 2:42:40
找可信赖的龙岗网站建设公司?别踩坑,看这几点就够

找可信赖的龙岗网站建设公司?别踩坑,看这几点就够

做企业,网站就是脸面。 在龙岗,想找个靠谱的网站公司,真不容易。 市面上广告满天飞。 承诺得天花乱坠。 最后交付的东西,却让人想砸电脑。 今天不聊虚的。 只聊怎么避坑。 怎么找到真正可信赖的龙岗网站建设团队。先说个大实话。 别信什么“三天上线”。 那是骗小白的。 正…

发布时间:2026/7/13 8:40:50
建站7年才悟出的网站建设思路,别再花冤枉钱了

建站7年才悟出的网站建设思路,别再花冤枉钱了

做建站这行整整7年了。 见过太多老板花几万块, 最后做出来的网站像个垃圾场。 今天不整那些虚头巴脑的术语。 就聊聊我踩过的坑, 和真正能落地的网站建设思路。很多老板一上来就问: “多少钱能做个高大上的?” 我通常直接劝退。 因为方向错了, 你给再多钱也是打水漂。 真正…

发布时间:2026/7/14 13:09:53
合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

合肥的网站建设避坑指南:别被低价忽悠,这3个细节决定生死

做企业官网最怕什么?不是技术难,是交钱后没人管,或者上线一个月连个访客都没有。这篇东西不扯虚的,直接告诉你怎么在合肥找个靠谱的团队,或者自己怎么避坑。先说个大实话,我在合肥混这行五年多,见过太多老板因为贪便宜吃大亏。你去百度搜“合肥的网站建设”,出来一堆报…

发布时间:2026/7/10 18:05:06
别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

别被忽悠了!德州网站建设那些坑,我拿真金白银换来的教训

做这行久了,心里就憋着一股火。每次看到客户拿着网上抄来的模板,问我能不能做成“苹果官网”那种效果。我就想笑。真的,太想笑了。今天咱不整那些虚头巴脑的专业术语。就聊聊德州网站建设里,那些让人头秃的真实事儿。我有个客户,老张。他是做德州本地建材的,实在人。当初…

发布时间:2026/7/13 2:08:03