最近在做word文档在线浏览,找了种种方法、控件之后,回归到word转HTML,在线浏览....
一下是后台代码,前台html页面默认代码即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using Word = Microsoft.Office.Interop.Word;
using Word = Microsoft.Office.Interop.Word;
没有引用好组件时,此处会报错,找不到Interop之类的,
这时需要在引用里面引用组件.net下的Microsoft.Office.Interop.Visio,Microsoft.Office.Interop.Word
后台代码如下:
protected void Page_Load(object sender, EventArgs e)
{
string relativePath = Request.QueryString[
"FilePath"
];
//相对路径 ,从跳转页面得到文件相对路径。
if
(relativePath ==
""
|| relativePath==
null
)
return
;
string serverPath = Server.MapPath(relativePath);
//相对转服务器对应路径
string html = serverPath.Replace(
".doc"
,
".html"
);
if
(!File.Exists(@html))
//html页面不存在,把word转换成html
{
string filename = WordToHtml(serverPath);
StreamReader fread =
new
StreamReader(filename, System.Text.Encoding.GetEncoding(
"gb2312"
));
string ss = fread.ReadToEnd();
Response.Write(ss);
//直接写字符串到网页会发现,文字可显示,图片、表格无法显示。因此在后面重跳转到html文件页面。
fread.Close();
fread.Dispose();
}
html = relativePath.Replace(
".doc"
,
".html"
);
//html文件也存储在同样的路径下,
//只需要改了原路径的后缀即可得到html文件路径
Response.Redirect(html);
return
;
}
/// <summary>
/// word转成html
/// </summary>
/// <param name="wordFileName"></param>
private string WordToHtml(object wordFileName)
{
//在此处放置用户代码以初始化页面
Word.Application word =
new
Word.Application();
Type wordType = word.GetType();
Word.Documents docs = word.Documents;
//打开文件
Type docsType = docs.GetType();
Word.Document doc = (Word.Document)docsType.InvokeMember(
"Open"
, System.Reflection.BindingFlags.InvokeMethod,
null
, docs,
new
Object[] { wordFileName,
true
,
true
});
//转换格式,另存为
Type docType = doc.GetType();
string wordSaveFileName = wordFileName.ToString();
string strSaveFileName = wordSaveFileName.Substring(0, wordSaveFileName.Length - 3) +
"html"
;
object saveFileName = (object)strSaveFileName;
docType.InvokeMember(
"SaveAs"
, System.Reflection.BindingFlags.InvokeMethod,
null
, doc,
new
object[] { saveFileName, Word.WdSaveFormat.wdFormatFilteredHTML });
docType.InvokeMember(
"Close"
, System.Reflection.BindingFlags.InvokeMethod,
null
, doc,
null
);
//退出 Word
wordType.InvokeMember(
"Quit"
, System.Reflection.BindingFlags.InvokeMethod,
null
, word,
null
);
return
saveFileName.ToString();
}
|