office文件在线预览,模仿网易邮箱在线预览的

最近研究了半天,代码是倾情奉送啊,C#,asp.net的

这个原理是office文件转换为PDF文件,然后再转换成SWF文件,FlexPaper+swfTools。

有个问题,需要在web.config中加这么一行<identity impersonate="true"
userName="administrator" password="你的服务器登录密码" />

  /// <summary>
/// 转换压缩文件,以便于预览(图片大小调整,office、pdf转成swf)
/// </summary>
/// <param name="sfilePath">真实文件路径(虚拟),含文件名,精确到网站根目录</param>
/// <param name="sfileExtention">真实的文件扩展名,要判断如何转换</param>
/// <param name="showWait">真是否显示提示等待转换信息,默认不提示</param>
public static void FileConvert(string sfilePath, string sfileExtention, bool showWait = false)
{
string PfilePath = HttpContext.Current.Server.MapPath(Path.GetDirectoryName(sfilePath));//当前操作的物理路径
string PfileName = Path.GetFileName(sfilePath);// 当前操作的文件名
string PfileExtention = sfileExtention.ToLower();// 当前操作的文件扩展名
if (File.Exists(PfilePath + "\\swf\\" + PfileName + ".swf"))
{ return; }
else
{
if (!Directory.Exists(PfilePath + "\\swf\\")) { Directory.CreateDirectory((PfilePath + "\\swf\\")); }
try
{
switch (DocuType(PfileExtention))
{
case TypeOfDocu.office:
if (showWait)
{
System.Text.StringBuilder StrB = new System.Text.StringBuilder(185);
StrB.Append("<div style=‘color: #0000CC; font-size: 14px;‘>文档需转换格式,才可以在线预览。<br /><br />转换中,马上就好,请稍后……</div>");
StrB.Append("<div style=‘color:white;‘>0000000000000000000000000000000000000000000000000您是第一个浏览的人</div>");//兼容IE256字符才显示,这里180就可以
HttpContext.Current.Response.Write(StrB.ToString());
HttpContext.Current.Response.Flush();
}
//将office文件转换成PDF,保存到swf文件夹下
string pdfFileName = PfileName + ".pdf";
string fileOutPath = PfilePath + "\\swf\\" + pdfFileName;
ExportPdf(PfilePath + "\\" + PfileName, fileOutPath, PfileExtention);
//切记,使用pdf2swf.exe 打开的文件名之间不能有空格,否则会失败
string cmdStr = HttpContext.Current.Server.MapPath("~/SWF/pdf2swf.exe");
string savePath = PfilePath + "\\swf\\";
//string saveSWFPath = HttpContext.Current.Server.MapPath("~/SWF/");
//将PDF文件转换成SWF格式文件
string sourcePath = @"""" + savePath + pdfFileName + @"""";//要转换的pdf文件路径
string targetPath = @"""" + savePath + PfileName + ".swf" + @"""";//转换之后swf文件存放的目标路径
//@"""" 四个双引号得到一个双引号,如果你所存放的文件所在文件夹名有空格的话,要在文件名的路径前后加上双引号,才能够成功
// -t 源文件的路径
// -s 参数化(也就是为pdf2swf.exe 执行添加一些窗外的参数(可省略))
string argsStr = " -p 1-100 -t " + sourcePath + " -s flashversion=9 -o " + targetPath;
//执行pdf到swf的转换
ExcutedCmd(cmdStr, argsStr);
File.Delete(savePath + pdfFileName);
break;
case TypeOfDocu.pdf:
cmdStr = HttpContext.Current.Server.MapPath("~/SWF/pdf2swf.exe");
sourcePath = @"""" + PfilePath + "\\" + PfileName + @"""";
targetPath = @"""" + PfilePath + "\\swf\\" + PfileName + ".swf" + @"""";
argsStr = " -p 1-100 -t " + sourcePath + " -s flashversion=9 -o " + targetPath;
ExcutedCmd(cmdStr, argsStr);
break;
case TypeOfDocu.jpg:
if (!Directory.Exists(PfilePath + "\\img\\")) { Directory.CreateDirectory((PfilePath + "\\img\\")); }
ImageSize(900, 0, PfilePath + "\\" + PfileName, PfilePath + "\\img\\" + PfileName + ".jpg", false);
break;
}
}
catch (Exception ex)
{
throw ex;
}
}
}

private static void ExcutedCmd(string cmd, string args)
{
using (Process p = new Process())
{
ProcessStartInfo psi = new ProcessStartInfo(cmd, args);
psi.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo = psi;
p.Start();
p.WaitForExit();
}
}

private static bool ExportPdf(string fileName, string outputFileName, string fileExt)
{
if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(outputFileName))
return false;
if (!File.Exists(fileName))
return false;
string formatExtension = Path.GetExtension(outputFileName);
if (string.IsNullOrEmpty(fileExt) || string.IsNullOrEmpty(formatExtension))
return false;
if (formatExtension != ".pdf")
return false;
switch (fileExt)
{
case "doc":
case "docx":
return WordExportAsPdf(fileName, outputFileName);
case "xls":
case "xlsx":
return ExcelExportAsPdf(fileName, outputFileName);
case "ppt":
case "pptx":
return PowerPointExportAsPdf(fileName, outputFileName);
default:
return false;
}
}

/// <summary>
/// 转换为pdf文件,适合(.doc、.docx、.mht、.htm文件类型)
/// </summary>
/// <param name="fileName"></param>
/// <param name="outputFileName"></param>
/// <returns></returns>
private static bool WordExportAsPdf(string fileName, string outputFileName)
{
bool isSucceed = false;
Word.WdExportFormat fileFormat = Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF;
Word._Application wordApp = null;
if (wordApp == null) wordApp = new Word.Application();
Word._Document wordDoc = null;

try
{
wordDoc = wordApp.Documents.Open(fileName);
wordDoc.ExportAsFixedFormat(outputFileName, fileFormat);
isSucceed = true;
}

finally
{
if (wordDoc != null)
{
wordDoc.Close();
wordDoc = null;
}
if (wordApp != null)
{
wordApp.Quit();
wordApp = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
}
return isSucceed;
}

/// <summary>
/// 转换为pdf文件,适合(.xls、.xlsx文件类型)
/// </summary>
/// <param name="fileName"></param>
/// <param name="outputFileName"></param>
/// <returns></returns>
private static bool ExcelExportAsPdf(string fileName, string outputFileName)
{
bool isSucceed = false;
Excel.XlFixedFormatType fileFormat = Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF;
Excel.Application excelApp = null;
if (excelApp == null) excelApp = new Excel.Application();
Excel.Workbook workBook = null;

try
{
workBook = excelApp.Workbooks.Open(fileName);
workBook.ExportAsFixedFormat(fileFormat, outputFileName);
isSucceed = true;
}

finally
{
if (workBook != null)
{
workBook.Close();
workBook = null;
}
if (excelApp != null)
{
excelApp.Quit();
excelApp = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
KillExcel();
}
return isSucceed;
}
/// <summary>
/// EXCEL进程无法正常退出
/// </summary>
private static void KillExcel()
{
Process[] pp = Process.GetProcessesByName("EXCEL");
foreach (Process p in pp)
{
if (p.SessionId == 0)
{ p.Kill(); }
}
}

/// <summary>
/// 转换为pdf文件,适合(.ppt、pptx文件类型)
/// </summary>
/// <param name="fileName"></param>
/// <param name="outputFileName"></param>
/// <returns></returns>
private static bool PowerPointExportAsPdf(string fileName, string outputFileName)
{
bool isSucceed = false;
PowerPoint.PpFixedFormatType fileFormat = PowerPoint.PpFixedFormatType.ppFixedFormatTypePDF;

PowerPoint.Application pptxApp = null;
if (pptxApp == null) pptxApp = new PowerPoint.Application();
PowerPoint.Presentation presentation = null;

try
{
presentation = pptxApp.Presentations.Open(fileName, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);
presentation.ExportAsFixedFormat(outputFileName, fileFormat);
isSucceed = true;
}

finally
{
if (presentation != null)
{
presentation.Close();
presentation = null;
}
if (pptxApp != null)
{
pptxApp.Quit();
pptxApp = null;
}
GC.Collect();
GC.WaitForPendingFinalizers();
}
return isSucceed;
}

这个东西在64位操作系统中通过,就是每次转换的时间很长,Excel没排版好,也乱打印成PDF。

还有一种是模仿网易邮箱的附件预览的。参考:http://www.officeweb365.com/docview.aspx,把office文档原版呈现,能把这个地址利用起来倒是挺好

office文件在线预览,模仿网易邮箱在线预览的,码迷,mamicode.com

时间: 2024-10-05 06:43:54

office文件在线预览,模仿网易邮箱在线预览的的相关文章

.net 实现Office文件预览,word文件在线预览、excel文件在线预览、ppt文件在线预览,excel转html,office格式转换,(.NET、SQL技术交流群206656202,入群需注明来自博客园)

近日公司要搞一个日常的文档管理的东东,可以上传.下载各种文件,如果是office文件呢还必须得支持预览功能,其他的都好说但是唯独office预览功能比较麻烦,但是不能不做,废话不多说了一步步来吧.分析了下网易邮箱的文件预览功能,他用的是微软的组件,最早叫Office online,现在分开了叫Word online.Excel online ....等等,效果十分炫酷功能十分强大,但是查看了下对api的说明发现对服务器的要求比较苛刻而且配置比较复杂不太适合.然后 又看了下腾讯用的是永中第三方组件

在线预览Office文件【效果类似百度文库】

引言 结合上个项目和目前做的这个项目,其中都用到了Office文件在线预览,目前项目中是用到公司购买的Ntko控件,该控件每次浏览文件时则会提示安装信任插件,很繁琐,而且浏览效果不好. 提到Office文件在线预览,那么效果最好的应该就是百度文库的效果了,所以今天就忙里偷闲自己搞了下. 用到知识点 1.Office文件转化为Pdf文件.直接用.Net类库:Microsoft.Office.Interop.Excel.Microsoft.Office.Interop.Powerpoint.Micr

Java实现word文档在线预览,读取office文件

想要实现word或者其他office文件的在线预览,大部分都是用的两种方式,一种是使用openoffice转换之后再通过其他插件预览,还有一种方式就是通过POI读取内容然后预览. 一.使用openoffice方式实现word预览 主要思路是: 1.通过第三方工具openoffice,将word.excel.ppt.txt等文件转换为pdf文件 2.通过swfTools将pdf文件转换成swf格式的文件 3.通过FlexPaper文档组件在页面上进行展示 我使用的工具版本: openof:3.4.

Java实现office文档与pdf文档的在线预览功能

最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完.查找资料发现我们要实现的过程就是把office转换成pdf,当然pdf就不用转换了.然后在pdf转换为swf文件,在浏览器实现预览swf文件.整个过程就是这样,看起来很简单,实际操作起来会出现各种问题.下面我就把自己写的这一小功能记录下来. 1.首先我们需要找到可以把office转换成pdf的方法

【项目实战】--Office文件预览

上篇文章已经介绍了office文件的上传,这次来简单介绍一下Office文件的预览. 实现如下: **1.工具准备** Pdf2swf:用于把PDF格式文件转换为swf文件 Flexpaper:flash播放器,可播放一帧一帧的flash **2.添加引用** 在项目中添加引用:选择COM里面Microsoft Office 15.0 object Library和Microsoft Word 15.0 object Library.引用里就会自动添加Microsoft.Office.Inter

在foxmail和outlook中设置QQ邮箱、gmail邮箱、新浪邮箱、微软邮箱、网易邮箱等的方法

怎么用邮件客户端如outlook和foxmail来设置各种邮箱 很多人平时都是在网页上面收发邮件,这个很简单,不用其他的设置,不过在客户端上设置收发邮件还是很不错的,今天就来讲讲各种邮箱在outlook和foxmail这两种常用的邮件客户端上面的设置方法.要想设置这个,需要先了解一下下面这个: 先来了解一下POP3.SMTP.IMAP和Exchange的区别在哪里? 我们在网页上面的时候权限足够大,所以可以直接使用,不过在用客户端的时候需要给定足够的权限我们才能访问邮件,毕竟这个安全性要求比较高

QQ邮箱、网易邮箱、TOM企业邮箱市场上的邮箱该如何选用

大多数想购买邮箱的用户都会面对这样的困惑:市场上这么多的邮箱品牌,而且每家都宣传的不错,怎么分辨呢?总不能拿邮箱当小白鼠一个一个测试,来最终决定哪个邮箱好就用哪个吧?!随着互联网的飞速发展,邮箱也在不断提升着自身的性能,为了减少用户选择邮箱的盲目性,我们特精选了TOM邮箱.网易邮箱.腾讯邮箱等知名品牌进行说明.TOM邮箱:TOM邮箱具有较大的用户群,无需专业的邮件系统管理员,很多邮箱即使企业自己拥有自己的邮件系统设备,为了维护电子邮件系统的正常运行,必须常备一个电子邮件系统管理员,对中小企业来说

VIP网易邮箱,163VIP邮箱,新浪vip等邮箱的对比分析

随着使用电子邮箱的人越来越多,邮箱不只存在免费邮箱,还存在VIP邮箱,比如:VIP网易邮箱,163vip邮箱,163.net邮箱,新浪vip邮箱.188vip邮箱等等.而这些邮箱,如TOMVIP邮箱,新浪vip邮箱,网易vip邮箱又有什么区别呢?哪个更好用呢?免费邮箱和付费邮箱之间较好的当然是VIP邮箱,VIP邮箱是免费邮箱的升级版.无论是服务器配置还是发信量上,都表现为更专业.一.各大品牌VIP邮箱介绍 163.net邮箱163vip邮箱(域名为163.net)是TOM集团旗下的产品之一,TO

.NET读取Office文件内容(word、excel、ppt)

引用命名空间 1 using Microsoft.Office.Core; 2 using Word = Microsoft.Office.Interop.Word; 3 using Excel = Microsoft.Office.Interop.Excel; 4 using PowerPoint = Microsoft.Office.Interop.PowerPoint; Word文件的读取 1 public string ReadFile() 2 { 3 string text = str