巧用数据流让 Word 文档在线阅读
常常写博客或空间日记的朋友,对网络编辑器(如图1,是CSDN的博客编辑器)并不陌生。也比較easy做出非常绚烂的排版。但这次在做一个BS的项目,客户一直在用Office的软件中的Word来编辑,并没用过这样的工具。非常陌生,“这里怎么设置行间距?”——让我瞬时摸不到头脑。在原版的系统中,客户公布信息时。索性用屏幕截图工具从Word中截图,然后粘到编辑器中,效果可想而知。
以下看一下代码实现:
后来细想,既然习惯了用Word。何不把Word上传,然后在线预览呢?
图1
查了一下资料,发现并不难。主要就是把Word转成Html格式。然后通过数据流读取。并显示出来!
注意:要先加入对 “Microsoft.Office.Interop.Word” 的引用
以下看一下代码实现:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Word = Microsoft.Office.Interop.Word; namespace TestWordOnline { public partial class demo : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string filename = WordToHtml("f:\\測试.doc"); //以gb2312格式的编码从字节流中读取字符 StreamReader fread = new StreamReader(filename, System.Text.Encoding.GetEncoding("gb2312")); string ss = fread.ReadToEnd(); //打印数据 Response.Write(ss); fread.Close(); fread.Dispose(); } /// <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(); } } }再看一下效果:
图3-Word版
图4-网页版
功能实现蛮简单的吧?我们用惯了这样的网络编程器。无形中把这样的习惯强加给了用户,孰不知恰好相反。程序是面向用户使用的,仅仅有让用户切身感觉到用得舒服。这才是每一个IT人士的出发点。