前几天有个老项目找到我,有多老呢?比我工作年限都长,见到这个项目我还得叫一声前辈。
这个项目目前使用非常稳定,十多年了没怎么更新过,现在客户想加一个小功能:在线预览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
,刚好客户能满足。
放这里分享一下,抛砖引玉,如果大家有更好的方案请不吝赐教。
热门文章
- 学生没钱怎么开网店卖东西赚钱呢(学生没钱怎么开网店卖东西赚钱呢)
- 2月25日20.4M/S|SSR/V2ray/Clash/Shadowrocket免费节点每天更新订阅链接,翻墙机场推荐分享
- 1月18日18.1M/S|V2ray/Shadowrocket/Clash/SSR免费节点每天更新订阅链接,翻墙机场推荐分享
- 动物医院仪器设备清单表格(动物医院实验室常见设备仪器)
- vue项目打包后文件过大怎么办,如何优化加载速度
- 动物疫苗龙头企业(动物疫苗行业龙头)
- 1月5日23M/S|Clash/Shadowrocket/V2ray/SSR免费节点每天更新订阅链接,翻墙机场推荐分享
- Eureka包含两个组件:Eureka Server 和 Eureka Client
- 动物医院管理系统有哪些(动物医院的主管部门)
- 动物疫苗接种时间查询app 动物疫苗查询系统