Asp.Net在线预览Word文档的解决方案与思路

发布时间:2022-06-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Asp.Net在线预览Word文档的解决方案与思路脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前几天有个老项目找到我,有多老呢?比我工作年限都长,见到这个项目我还得叫一声前辈。

这个项目目前使用非常稳定,十多年了没怎么更新过,现在客户想加一个小功能:在线预览Word文档

首先想到的是用第三方的服务,例如WPS的开放平台。

Asp.Net在线预览Word文档的解决方案与思路

刚看完文档,客户来了句,要一次性的哦,后续再付费的通通不要。

Asp.Net在线预览Word文档的解决方案与思路

得嘞,换其他方案吧。

项目特点

Asp.Net不带Core.NET Framework 4.0,部署在Windows平台上。

解决方案

大致思路:先将Word文档转换Html,再预览Html

1、Word文档转Html

先引用OfficeDLL,在COM里面,注意:电脑需要安装Office哦。

Asp.Net在线预览Word文档的解决方案与思路

Asp.Net在线预览Word文档的解决方案与思路

又注意:请在DLL属性里面将嵌入互操作类型改为False

Asp.Net在线预览Word文档的解决方案与思路

转换过程一个方法搞定:

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、预览

上一步WordHtml的方法已经准备就绪,我们再准备这样一个Word文档。

Asp.Net在线预览Word文档的解决方案与思路

简单写一下逻辑:

Asp.Net在线预览Word文档的解决方案与思路

Asp.Net在线预览Word文档的解决方案与思路

是不是特别简单,我们再看看成品效果。

Asp.Net在线预览Word文档的解决方案与思路

Asp.Net在线预览Word文档的解决方案与思路

这种方案局限性比较大,部署平台必须安装Office,刚好客户能满足。

放这里分享一下,抛砖引玉,如果大家有更好的方案请不吝赐教。

脚本宝典总结

以上是脚本宝典为你收集整理的Asp.Net在线预览Word文档的解决方案与思路全部内容,希望文章能够帮你解决Asp.Net在线预览Word文档的解决方案与思路所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: