zoukankan      html  css  js  c++  java
  • 巧用数据流让 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人士的出发点。

  • 相关阅读:
    Hadoop学习:Map/Reduce初探与小Demo实现
    OCR OneNote
    百度OCR识别示例
    Sqlserver 中添加数据库登陆账号并授予数据库所有者权限
    IIs 中运行asp程序出现“An error occurred on the server when processing the URL. Please contact the system administrator.”错误
    SqlServer 删除重复记录
    Chrome 制作绿色便携版
    Asp.net 在网页编写C#代码示例-- 一个简单的web MsSql 命令执行环境
    C# 中如何将List<string>里的集合转换成字符串并按指定的字符进行分隔?
    使用SQL SERVER FOR XML PATH将多个结果集转换成一行并进行去重处理
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8398624.html
Copyright © 2011-2022 走看看