Asp.Net在線預(yù)覽Word文檔的解決方案與思路詳解
前幾天有個(gè)老項(xiàng)目找到我,有多老呢?比我工作年限都長,見到這個(gè)項(xiàng)目我還得叫一聲前輩。
這個(gè)項(xiàng)目目前使用非常穩(wěn)定,十多年了沒怎么更新過,現(xiàn)在客戶想加一個(gè)小功能:在線預(yù)覽Word文檔。
首先想到的是用第三方的服務(wù),例如WPS的開放平臺。

剛看完文檔,客戶來了句,要一次性的哦,后續(xù)再付費(fèi)的通通不要。

得嘞,換其他方案吧。
項(xiàng)目特點(diǎn)
Asp.Net不帶Core,.NET Framework 4.0,部署在Windows平臺上。
解決方案
大致思路:先將Word文檔轉(zhuǎn)換Html,再預(yù)覽Html。
1、Word文檔轉(zhuǎn)Html
先引用Office的DLL,在COM里面,注意:電腦需要安裝Office哦。


又注意:請?jiān)?code>DLL屬性里面將嵌入互操作類型改為False

轉(zhuǎn)換過程一個(gè)方法搞定:
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、預(yù)覽
上一步Word轉(zhuǎn)Html的方法已經(jīng)準(zhǔn)備就緒,我們再準(zhǔn)備這樣一個(gè)Word文檔。

簡單寫一下邏輯:


是不是特別簡單,我們再看看成品效果。


這種方案局限性比較大,部署平臺必須安裝Office,剛好客戶能滿足。
到此這篇關(guān)于Asp.Net在線預(yù)覽Word文檔的解決方案與思路的文章就介紹到這了,更多相關(guān)Asp.Net在線預(yù)覽Word文檔內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
asp.net 結(jié)合mysql存儲過程進(jìn)行分頁代碼
最近用mysql + asp.net來寫網(wǎng)站,既然mysql已經(jīng)支持存儲過程了,那么像分頁這么常用的東西,當(dāng)然要用存儲過程啦2008-11-11
Asp.Net Core中創(chuàng)建多DbContext并遷移到數(shù)據(jù)庫的步驟
這篇文章主要介紹了Asp.Net Core中創(chuàng)建多DbContext并遷移到數(shù)據(jù)庫的步驟,幫助大家更好的理解和學(xué)習(xí)使用Asp.Net Core,感興趣的朋友可以了解下2021-03-03
asp.net mvc下拉框Html.DropDownList 和DropDownListFor的常用方法
這篇文章主要介紹了asp.net mvc下拉框Html.DropDownList 和DropDownListFor的常用方法 ,需要的朋友可以參考下2014-10-10
Request.QueryString與一般NameValueCollection的區(qū)別
最近在做一個(gè)搜索程序的優(yōu)化改進(jìn),將搜索結(jié)果按照查詢的參數(shù)不同進(jìn)行緩存。緩存的Key很自然的就想到了用查詢字符串,而獲取查詢字符串的最簡單方式是通過Request.QueryString.ToString()方法2011-12-12
ASP.NET 防止按鈕多次提交核心實(shí)現(xiàn)代碼
防止按鈕多次提交通常都是在注冊表單中提示時(shí)的一個(gè)小功能,具體實(shí)現(xiàn)如下,由此需求的朋友可以參考下2013-08-08

