前几天有个老项目找到我,有多老呢?比我工作年限都长,见到这个项目我还得叫一声前辈 。
这个项目目前使用非常稳定,十多年了没怎么更新过,现在客户想加一个小功能:在线预览word文档 。
【Asp.Net在线预览Word文档的解决方案与思路】首先想到的是用第三方的服务,例如wps的开放平台 。
文章插图
刚看完文档,客户来了句,要一次性的哦,后续再付费的通通不要 。
文章插图
得嘞,换其他方案吧 。
项目特点Asp.Net不带Core,.NET Framework 4.0,部署在windows平台上 。
解决方案大致思路:先将Word文档转换html,再预览Html 。1、Word文档转Html先引用office的DLL,在COM里面,注意:电脑需要安装Office哦 。
文章插图
文章插图
又注意:请在DLL属性里面将嵌入互操作类型改为False
文章插图
转换过程一个方法搞定:
using Microsoft.Office.Interop.Word;public static string WordToHtml(string path){ string root = AppDomain.CurrentDomain.BaseDirectory; var htmlName = $"{Guid.NewGuid().ToString("N")}.html"; var htmlPath = root + $"Resource/Temporary/"; if (!Directory.Exists(htmlPath)) {Directory.CreateDirectory(htmlPath); } ApplicationClass word = new ApplicationClass(); Type wordType = word.GetType(); Documents docs = word.Documents; Type docsType = docs.GetType(); Document doc = (Document)docsType.InvokeMember("Open", BindingFlags.InvokeMethod, null, docs, new Object[] { (object)path, true, true }); Type docType = doc.GetType(); docType.InvokeMember("SaveAs", BindingFlags.InvokeMethod, null, doc, new object[] { (htmlPath + htmlName), WdSaveFormat.wdFormatFilteredHTML }); docType.InvokeMember("Close", BindingFlags.InvokeMethod, null, doc, null); wordType.InvokeMember("Quit", BindingFlags.InvokeMethod, null, word, null); return htmlName;}
2、预览上一步Word转Html的方法已经准备就绪,我们再准备这样一个Word文档 。文章插图
简单写一下逻辑:
文章插图
文章插图
是不是特别简单,我们再看看成品效果 。
文章插图
文章插图
这种方案局限性比较大,部署平台必须安装Office,刚好客户能满足 。
文章来自
https://www.cnblogs.com/cool-net/p/16191068.html
推荐阅读
- 保时捷|保时捷发布会遭车主在线维权 网友:评论比直播精彩
- CDN和中心性
- Vue中使用v-viewer组件实现图片预览功能,支持Vue3
- 可以在线看视频和文档的开源网盘系统kiftd部署和使用教程
- C#10新功能预览
- .NET 6 Preview 4 已发布,ASP.NET Core 更新内容
- 服务器能承受同时在线人数原来是这么计算出来的
- deepl翻译在线翻译?十六进制翻译器
- 一直很爱你 歌词?一直很爱你在线观看
- 智能手机|天玑8000性能小金刚 Redmi Note 12要改名?卢伟冰在线征名