office 文件在网页中显示
1.如何在网页上显示word和excel
a.可以使用office组件或aspose将word 和excel 转换为pdf 然后在网页上打开pdf,但是效果不是很好
.比如说excel 多个工作薄不是按exce 格式显示出来,宽度大小,不好控制(?).
b.可以使用office组件或aspose将文档转换为html,但是转换为html 会产生额外的XML和CSS和图片文件.(当文件保存到服务器其他盘符中,
文件流读取html,只好访问html页面,其他html附带的 css和图片和xml,无权限访问,文件流也不好同时读取他们几个(?).
c.可以使用其他转换,比如http://www.cutepdf.com/(?),或者用文件流读取再转换(没试过)
d.最好将文件转换为Mhtml格式的,这是因为Mhtml是个单个网页文件.(主要是便于文件流读取放在本地的文件)
Mhtml称为聚合html文档web文档或单一文件网页应用于(asscss,word,excel)是单个网页 文件可将网站所有元素(包括声音,图片)保存到单个mhtml文件中.
2.对于项目而言如何上传文件,文件上传到哪儿,如何保存这些上传文件
a.可以将文件上传到asp.net项目当中,但是据说项目越来越大影响后期运行效率,不利于维护,没有验证过.
b.可以将文件用数据流读取保存到数据库当中,没有实践过(?).
b.可以将文件上传到服务器本地磁盘当中,便于对文件的操作和管理.
A.如果上传到服务器读取转换的网页文件
B.上传到数据库转换成网页文件(没试过)(?)
C.上传到服务器项目外的其他文件中,好像微软在asp.net上面出于安全考虑并不支持直接访问站点外的文件(?),其他类型开发不清楚支不支持,
所以才必须将office装换位单个网页文件Mhtml,用文件流的方式读取显示在网页上,
1)可以使用添加虚拟目录,就是在服务器上添加虚拟目录路径,映射到绝对路径目录上就是指向你要访问的图片路径,在Vs开发中新建上传文件夹,
只是在发布文件后的ISS上, 做改动,将原有文件夹变为虚拟路径文件,不过还是按照Server.MapPath(@"~/new_ams/file/" + fileName)获取路径,
(?)具体还没实践过.
2)可以将用文件流读取本地文,参考代码http://www.cnblogs.com/insus/archive/2013/02/05/2892678.html,
但是有一点文件流好像只可以读取单个文件(?),不可以读取同时读取html +外部CSS+图片,所以运用前面的方法将文件转换为Mhtml格式的,
当Office转化为来的Mhtml用文件流读取时web页面显示的是Hmtl的乱码内容,原因是解码问题,具体参考
参考链接http://www.cnblogs.com/SanMaoSpace/archive/2013/03/02/2941078.htm
3.利用office 自带的组件将office转换为Html
用Office组件将Office转换为Html,参考链接 http://zhidao.baidu.com/link?url=AvlZUEusXh7C
a.引用office组件,如果office 没有激活,最好激活和添加开发模式的(?),在vs添加引用里面程序集,如果引用失败,右击程序集属性
,嵌入互操类改为False,为什么改为false(?). using Word = Microsoft.Office.Interop.Word; using Excel = Microsoft.Office.Interop.Excel;
b.如何将office 转变为单一网页文件Mhtml,当时这个问题搞了一天结果是应该选择wdFormatWebArchive ,
Web 档案格式,他是不带Mhtml的单次,说明中也没提示。
c.但是,由于某些原因(权限,配置)在服务器上不可运行,具体解决方法,有待探究.
文件出自:http://www.cnblogs.com/mark01/p/4244197.html
/// <summary>
/// WinWord文件生成HTML并保存
/// </summary>
/// <param name="FilePath">需要生成的word文件的路径</param>
/// <param name="saveFilePath">生成以后保存HTML文件的路径</param>
/// <returns>是否生成成功,成功为true,反之为false</returns>
private bool GenerationWordHTML(string FilePath, string saveFilePath)
{
try
{
FilePath = @"D:\a\请假审批表.doc";
saveFilePath = @"D:\a\请假审批表.html";
Word.ApplicationClass word = new Word.ApplicationClass();
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[] { FilePath, true, true }); /// 转换格式,另存为 HTML
Type docType = doc.GetType(); /*下面是Microsoft Word 9 Object Library的写法: */
/*docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFilePath, Word.WdSaveFormat.wdFormatHTML });*/ /*下面是Microsoft Word 10 Object Library的写法: */
docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod,
null, doc, new object[] { saveFilePath, Word.WdSaveFormat.wdFormatFilteredHTML }); /// 退出 Word
wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
return true;
}
catch
{
return false;
}
finally
{
//最后关闭打开的winword 进程
Process[] myProcesses = Process.GetProcessesByName("WINWORD");
foreach (Process myProcess in myProcesses)
{
myProcess.Kill();
}
} } /// <summary>
/// Ecxel文件生成HTML并保存
/// </summary>
/// <param name="FilePath">需要生成的ecxel文件的路径</param>
/// <param name="saveFilePath">生成以后保存HTML文件的路径</param>
/// <returns>是否生成成功,成功为true,反之为false</returns>
protected bool GenerationExcelHTML(string FilePath, string saveFilePath)
{
try
{
FilePath = @"D:\a\申购单.xlsx";
saveFilePath = @"D:\a\申购单.html";
Excel.Application app = new Excel.Application();
app.Visible = false;
Object o = Missing.Value; ///打开文件
/*下面是Microsoft Excel 9 Object Library的写法: */
/*_Workbook xls = app.Workbooks.Open(FilePath, o, o, o, o, o, o, o, o, o, o, o, o);*/ /*下面是Microsoft Excel 10 Object Library的写法: */
Excel._Workbook xls = app.Workbooks.Open(FilePath, o, o, o, o, o, o, o, o, o, o, o, o, o, o); ///转换格式,另存为 HTML
/*下面是Microsoft Excel 9 Object Library的写法: */
/*xls.SaveAs(saveFilePath, Excel.XlFileFormat.xlHtml, o, o, o, o, XlSaveAsAccessMode.xlExclusive, o, o, o, o);*/ /*下面是Microsoft Excel 10 Object Library的写法: */
xls.SaveAs(saveFilePath, Excel.XlFileFormat.xlHtml, o, o, o, o, Excel.XlSaveAsAccessMode.xlExclusive, o, o, o, o, o); ///退出 Excel
app.Quit();
return true;
}
catch
{
return false;
}
finally
{
//最后关闭打开的excel 进程
Process[] myProcesses = Process.GetProcessesByName("EXCEL");
foreach (Process myProcess in myProcesses)
{
myProcess.Kill();
}
}
}
officeCom,用office组件将Office转换为Html
string parameter = context.Request.QueryString["file"];
context.Response.ContentType = "message/rfc822";
FileStream fs = new FileStream(parameter, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
Byte[] bytes = br.ReadBytes((Int32)fs.Length);
br.Close();
fs.Close();
context.Response.OutputStream.Write(bytes, ,bytes.Length);
文件流读取本地文件
FileStream fileStream = new FileStream(fileResPath, FileMode.Open);
long fileSize = fileStream.Length;
byte[] fileBuffer = new byte[fileSize];
fileStream.Read(fileBuffer, , (int)fileSize);
//如果不写fileStream.Close()语句,用户在下载过程中选择取消,将不能再次下载
fileStream.Close();
Context.Response.ContentType = "application/octet-stream";
Context.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName.Substring(), Encoding.UTF8));
Context.Response.AddHeader("Content-Length", fileSize.ToString());
Context.Response.BinaryWrite(fileBuffer);
Context.Response.End();
Context.Response.Close();
文件流下载本地文件
总结:我认为最好的办法, 上传为offfice文件时,就将office转换为Mhtml (可以通过Office组件,或者aspose),将他们同时保存到服务器本地的其他文件中
,然后再用文件流读取office 和Mhtml ,刚开始就生成mhtml 方便后者的每次预览都要生成,速度较慢,保存到服务器本地完全是减少项目压力.便于数据管理操作.
$经过几个星期的磨蹭,感觉用com 组件做,在服务器上对访问权限做配置,因为不太了解,所以还是放弃,但是可以实现当然在本地可以运行(?)
,具体解决方法在我的后面一节有所说明,用aspose 没有破解版的,最新版本的aspose.cell 可以将excel 转换为Mhtml
aspose :https://code.msdn.microsoft.com/Applying-Conditional-af9e0e4f/view/Discussions#content
office 文件在网页中显示的更多相关文章
- 如何在浏览器网页中显示word文件内容
如何在浏览器网页中显示word文件内容 把word文件读到byte[]中,再Response.OutputStream.Write(bytes)到客户端去 Page_Load事件中写: //FileS ...
- 网页中显示xml,直接显示xml格式的文件
第一种方法 使用<pre></pre>包围代码(在浏览器中测试不行啊,但是在富编辑器中又可以,怪):使用<xmp></xmp>包围代码(官方不推荐,但是 ...
- 在网页中显示CHM (c# csharp .net asp.net winform)
CHM即“已编译的帮助文件”,主要由.hhc(目录文件)..hhk(索引文件)以及相应的帮助主题文件(.html,.htm)这些内容编译而成. 方法对比 在网页中显示CHM内容,大致有以下几种办法: ...
- Emoji表情在网页中显示
最近遇到一个项目,客户手机上发送的表情要在电脑网页中显示,没有找到简便方法,于是有了以下方案. 由于Emoji表情传到后台是“口”,怎么找出接收数据中的表情是关键,各种搜索后,我用下面的正则表达式匹配 ...
- 网页中显示pdf的方法
非常好的在网页中显示pdf的方法 今天有一需求,要在网页中显示pdf,于是立马开始搜索解决方案,无意中发现一个非常好的解决方法,详见http://blogs.adobe.com/pdfdevjunki ...
- 网页中显示pdf
1.<embed width="800" height="600" src="test_pdf.pdf"> </embed ...
- 非常好的在网页中显示pdf的方法
今天有一需求,要在网页中显示pdf,于是立马开始搜索解决方案,无意中发现一个非常好的解决方法,详见http://blogs.adobe.com/pdfdevjunkie/web_designers_g ...
- Flash设置全屏后,放到网页中显示不正常
stage.displayState = StageDisplayState.FULL_SCREEN;//全屏,注意当设置全屏后,放到网页中显示不正常
- 如何把报表放到网页中显示(Web页面与报表简单集成例子)
1.问题描述 现在用户开发的系统基本上趋向于BS架构的浏览器/服务器模式,这些系统可能由不同的语言开发,如HTML.ASP.JSP.PHP等,因此需要将制作好的报表嵌入到这些页面中. FineRepo ...
随机推荐
- vs2013 创建网站
从文件菜单中选择新建网站,版本选择4,如果选择更高级的版本在发布的时候老是会报错,暂时找不到解决的方法,所以就选择4这个版本了.选择asp的空网站,在下面选择文件系统. 项目建好后如下,然后添加一个w ...
- 在[self addsubView:xxx]中,self.name 和 _name的区别
在[self addsubView:xxx]中,self.name 和 _name的区别self.name 会调用重写的getter方法,而_name添加的只是_name 这个成员变量
- 简单实用的HTML代码
简单实用的HTML代码 一.HTML各种命令的代码: 1.文本标签(命令) <pre></pre> 创建预格式化文本 <h1></h1> 创建最大的标题 ...
- $(document).ready(function(){})和window.onload=function(){}的比较
这两个函数想必每个前端开发者都不会很陌生,但是很了解用法的人估计就比较少了,博主也是最近才开始注意到这两个函数的区别. 首先$(document).ready(function(){})等同于$(). ...
- ExtJS 饼状图报表
简单的ExtJS饼状图报表. 先上源码,咱再慢慢解析: Ext.onReady(function(){ var store = Ext.create('Ext.data.JsonStore', { f ...
- Windows,Linux换行知识
换行符在写文件的时候用得上 Linux: "\n"Windows: "\r\n" 注意:换行符一定要加上双引号,单引号是没有用的.
- 用Apache Ivy实现项目里的依赖管理
Apache Ivy是一个管理项目依赖的工具. 它与Maven Apache Maven 构建管理和项目管理工具已经吸引了 Java 开发人员的注意.Maven 引入了 JAR 文件公共存储库的概念 ...
- wine下汉字方块解决
1.修改字体 首先,下载一个字体,例如win下的新宋体 其次, mkdir /usr/share/fonts/windows mv simsun.ttc /usr/share/fonts/window ...
- Taurus.MVC
开源:Taurus.MVC 框架 为什么要创造Taurus.MVC: 记得被上一家公司忽悠去负责公司电商平台的时候,情况是这样的: 项目原版是外包给第三方的,使用:WebForm+NHibernate ...
- Windows中安装Emacs
首先从http://gnu.org/software/emacs中下载window下的压缩包,然后解压..运行ROOT/bin/addpm.exe进行安装. 将鼠标右键添加Emacs编辑: 1. 打开 ...