`

ASP上传word文档,转化为HTML(C# 实现)

    博客分类:
  • C#
阅读更多

      对于上一篇所说的公开平台,有个功能是发布公开信息。原本这功能的操作是,在一个TextArea(在线编辑器如xheditor)里编写内容,编写文本、上传图片等,然后保存把TextArea中的内容存入数据库。当需要浏览该信息时,在网页上显示。这样挺好的,很多网站都是这么做的,包括ITEYE写blog时,也是在这在线编辑器中编辑的。但是客户说了,每次要上传图片都要一张一张地上传,太麻烦了啊,能够把word文档中的内容直接复制到TextArea就好了。对于此,word文档中复制文本过来是没问题的,但是复制图片过来,问题就大了,在线编辑器不能把复制粘贴过来的图片自动上传到服务器啊,就算是HTML5上传也不行啊,我不会弄啊,google了好久也不会啊……腾讯的QQ邮箱可以做到复制word文档里的图片,直接粘贴到邮件正文里。他是怎么做到的啊!GMAIL都木有这功能啊!

      既然以上所说的功能不能实现(小弟实力有限唉),那退而求其次,应该可以用其他方法替代,最坏就是大不了跟客户说这功能做不了,咋地吧……我想了想,word文档有个“另存为”功能,把doc转换为html的。那能不能让客户上传word文档,系统把doc转为html,保存好。当群众查询信息时,直接展示这个html不就好了!好,就这么办!

 

首先,在asp页面上添加上传文件的file标签:

 

<tr>
<td align="right">上传word文档:</td>
<td colspan="2"><input type="file" id="file1" runat="server" /> </td>
</tr>

 

 

然后编写后台代码,在用户提交时对file1进行处理。

在C#源文件的开头,要添加using微软office的东西:

using WORD=Microsoft.Office.Interop.Word;

 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using WORD=Microsoft.Office.Interop.Word;//要添加这个,用于处理word

 对于Microsoft.Office.Interop.Word,有个傻*问题折腾了我大半个早上,唉……新手

 

当我添加Microsoft.Office.Interop.Word时,Visual studio提示:命名空间“Microsoft.Office”中不存在类型或命名空间名称“Office"。Google了好久,又是修复OFFICE2007,又是引入COM中的com/Microsoft Office 12.0 Object Library,都不行啊,要么提示不存在“Office”,要么提示不存在“Interop”。最后只能百度知道了,没想到百度知道的第一个搜索结果就解决了这个问题。只要在项目的Bin中引入以下DLL文件就可以了:Microsoft.Office.Interop.Word.dll,可以从附件下载。

 

解决这个问题后,就可以写btnOK_Click方法,来处理word文档了。

贴上代码:

 

protected void btnOK_Click(object sender, EventArgs e)
{
 if (file1!=null&&file1.PostedFile!=null&&file1.PostedFile.ContentLength > 0)
            {
                //上传word文档
                HttpPostedFile wordFile = file1.PostedFile;
                string wordFileName = wordFile.FileName.ToLower();
                string fileExt = Path.GetExtension(wordFileName).ToLower();
                //判断扩展名
                if (String.IsNullOrEmpty(fileExt) || (fileExt!=".doc"&&fileExt!=".docx") )
                {
                    //TODO 提示 上传失败!只能上传后缀名为doc或docx的word文档。" 并返回
                }
                //判断文件大小
                if (wordFile.InputStream == null || wordFile.InputStream.Length > maxSize)
                {
                    //TODO 提示 上传失败!上传的文件过大 并返回
                }

                //把word文档保存在服务器中
                string randomFileName = WebBase.GetNewNo();//随机生成文件名(WebBase是自己写的一个工具类)
                string newFileName = randomFileName + fileExt;//保存在服务器上的word文档的文件名
                string localPath = WebBase.ServerMapPath(dirPath + imgPath);//保存在服务器上的文件夹的路径
                if (!Directory.Exists(localPath))
                {
                    Directory.CreateDirectory(localPath);
                }
                wordFile.SaveAs(localPath + newFileName);

                //把word文档转化为html
                WORD.ApplicationClass word = new WORD.ApplicationClass();
                Type wordType = word.GetType();
                WORD.Documents docs = word.Documents;
                // 打开文件
                Type docsType = docs.GetType();
                //打开一个Word文档
                string wordPathInSever = localPath + newFileName;
                Microsoft.Office.Interop.Word.Document doc = (WORD.Document)docsType.InvokeMember("Open",
                System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { wordPathInSever, true, true });

                // 转换格式,另存为html
                Type docType = doc.GetType();
                string htmlFileName = randomFileName + ".html";
                //被转换的html文档保存的位置
                object saveFileName = localPath + htmlFileName;
                //保存
                docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod,
                        null, doc, new object[] { saveFileName, WORD.WdSaveFormat.wdFormatFilteredHTML });

                //一定要先关闭,否则退出Word时不能释放资源
                docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, doc, null);
                //退出Word
                wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
             }
}

 这样就成功把word转化为html了,然后再往数据库中记录一些信息(如保存的html的路径等),当用户查询时,根据这些信息找到html页面,直接显示这html就可以了。

 

 

 

分享到:
评论

相关推荐

    C# ASP.NET - 将Web网页导出至Word文档

    说明: 用C#实现“将Web网页导出至Word文档”^_^

    【ASP.NET编程知识】C#实现EXCEL数据到TXT文档的转换.docx

    【ASP.NET编程知识】C#实现EXCEL数据到TXT文档的转换.docx

    以html形式显示或预览word,excel,pdf,txt

    本源码主要是ASP.net后台通过相应的类把word\excel\pdf\txt文件转化为html,将地址传回前端,前端获取地址,用iframe进行展现预览。

    C# word操作

    Spire.Doc for .NET是一个专业的Word .NET库,设计用于帮助开发人员高效地开发创建、阅读、编写、转换和打印任何来自.NET( C#, VB.NET, ASP.NET)平台的Word文档文件的功能。作为一种独立的Word .NET组件,Spire.Doc ...

    asp.net在线文档预览(vb/c#)

    获取word文档本地路径,通过以上方法,转化成html文档并在网页上显示

    asp.net中Word转Html的办法(不需要WORD组件)

    基本思路:把Word文件上传到服务器,读取其内容存储为Html,然后加载Html内容1:使用Microsoft.Office.Interop.Word组件 这是比较常用的一种方式,代码就不贴出了,网上大把的例子 缺点:服务器需要装Word的组件,...

    spire.doc-fe_7.1(免费).zip

    doc for .... net库,专门为开发人员设计,用于从任何. net平台创建、读取、写入、转换和打印...此外,它还支持使用c#将Word Doc/Docx转换为PDF, Word转换为SVG, Word转换为PostScript, Word转换为PCL(打印机命令语言)。

    ASP.NET 用 FlexPaper 在页面上显示 PDF 文件

    另外,如果是 Word 文档,那么客户可以先利用 Office 插件或其他三方工具将 Word 文档转换成 PDF,再上传,也可以利用 Office COM 组件编写代码,将客户上传的 Word 文档直接转换成 PDF 文件。网上有很多这样的资料...

    C#公共类源代码 带帮助文档

    输入法帮助,全角 转换为半角(ImeHelper.cs) Winform提示框 的摘要说明。(MessageUtil.cs) 包含互操作方法调用的应用程序中使用。(NativeMethods.cs) 托盘图标辅助类(NotifyIconHelper.cs) 打印机类...

    Xceed.Words.NET(操作word).rar

    用于从数据库中读取二进制word文件进行预览,无需下载至本地,用于从数据库中读取二进制word文件进行预览,无需下载至本地,用于从数据库中读取二进制word文件进行预览,无需下载至本地。

    ASP.NET 3.5 开发大全word课件

    这是整部学习资料 由于太大第一章免费供应给大家 在我的上传资源中 如果觉得还不过希望大家给个好评 当然具体本书的作者就不深究了把! 第1章 认识ASP.NET 3.5 1.1 什么是ASP.NET 1.1.1 .NET历史与展望 1.1.2 ASP...

    NTKO文档在线编辑控件4.0.1.2

    4 新增压缩存储和传输功能 V2.5.1版本新增的压缩存储和传输功能,使的20K左右的Word文档压缩后只有2K左右。极大节约了数据库或磁盘空间,提高了网络利用率和传输效率。 5 新增全文批注功能和远程印章管理控件。 V2.5...

    NTKO文档在线编辑控件独立安装包4.0.6.5(适合TA2009\2010\2011版本)

    NTKO OFFICE文档控件,支持文档电子签名[数字签名],支持PHP,ASP,JSP,C#,VB.NET,DOMINO等各种web编程语言和服务器的在线编辑痕迹保留手写签名电子印章全屏批注控件。 NTKO OFFICE文档控件能够在浏览器窗口中直接...

    C#编程经验技巧宝典

    115 &lt;br&gt;0192 如何获取“我的文档”系统文件夹路径 115 &lt;br&gt;0193 如何获取应用程序当前执行的路径 116 &lt;br&gt;0194 如何获取当前操作系统的信息 116 &lt;br&gt;0195 如何实现基本数据类型随意转换 116...

    asp.net知识库

    Asp.Net(C#)利用XPath解析XML文档示例 XSL .Net框架下的XSLT转换技术简介 一个XSLT的简单例子 XSLXSLT板主题整理 xsl入门的好文章 新手学习XSL的好东西 XSL语法介绍 XSL学习心得 - 调用属性值 XSLT与XML转换的详细...

    C#公共类通用类非常齐全

    输入法帮助,全角 转换为半角(ImeHelper.cs) Winform提示框 的摘要说明。(MessageUtil.cs) 包含互操作方法调用的应用程序中使用。(NativeMethods.cs) 托盘图标辅助类(NotifyIconHelper.cs) 打印机类(POSPrinter...

    C-_WORD-read-online

    文档阅读: 用户可以上传word文档,这样就可以在这个项目直阅读(主要即使将doc转换成html格式), 同时支持搜索和评论, 下载等; 作业布置: 科目的老师对负责的班级布置作业(该功能做完成基础的,没有全部完成),...

    SOAOFFICE - 微软 OFFICE 中间件

    3. 需要动态生成指定格式的Word文档的; 4. 需要把html页面中表格导出到excel的; 5. 需要在html页面中套打票据、报表的; 6. 需要在html页面中显示复杂报表,并要求精确打印预览及打印的; 7. 需要动态生成中国式...

Global site tag (gtag.js) - Google Analytics