前幾天有個老項目找到我,有多老呢?比我工作年限都長,見到這個項目我還得叫一聲前輩。
這個項目目前使用非常穩定,十多年了沒怎么更新過,現在客戶想加一個小功能:在線預覽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