[Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!
来源:互联网 发布:沈阳数据恢复中心 编辑:程序博客网 时间:2024/06/06 02:48
引言
之前项目需要,查找了office文档在线预览的解决方案,顺便记录一下,方便以后查询。
方案一
直接在浏览器中打开Office文档在页面上的链接。会弹出如下窗口:
优点:主流浏览器都支持。
缺点:Office文档链接在浏览器中打开,会有如上图的提示,需用户自己选择打开或者保存功能,如果客户电脑上安装迅雷下载软件,会启动迅雷下载,用户体验不好。
方案二
office文档转html,首先引入com组件中office库,然后在程序集扩展中引入word,excel,ppt的dll。
然后F6生成,会报如下错误:
解决办法:
office文档转换html辅助类:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using Microsoft.Office.Core; 6 using Word = Microsoft.Office.Interop.Word; 7 namespace Wolfy.OfficePreview 8 { 9 public class Office2HtmlHelper10 {11 /// <summary>12 /// Word转成Html13 /// </summary>14 /// <param name="path">要转换的文档的路径</param>15 /// <param name="savePath">转换成html的保存路径</param>16 /// <param name="wordFileName">转换成html的文件名字</param>17 public static void Word2Html(string path, string savePath, string wordFileName)18 {19 20 Word.ApplicationClass word = new Word.ApplicationClass();21 Type wordType = word.GetType();22 Word.Documents docs = word.Documents;23 Type docsType = docs.GetType();24 Word.Document doc = (Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { (object)path, true, true });25 Type docType = doc.GetType();26 string strSaveFileName = savePath + wordFileName + ".html";27 object saveFileName = (object)strSaveFileName;28 docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Word.WdSaveFormat.wdFormatFilteredHTML });29 docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, doc, null);30 wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);31 32 }33 /// <summary>34 /// Excel转成Html35 /// </summary>36 /// <param name="path">要转换的文档的路径</param>37 /// <param name="savePath">转换成html的保存路径</param>38 /// <param name="wordFileName">转换成html的文件名字</param>39 public static void Excel2Html(string path, string savePath, string wordFileName)40 {41 string str = string.Empty;42 Microsoft.Office.Interop.Excel.Application repExcel = new Microsoft.Office.Interop.Excel.Application();43 Microsoft.Office.Interop.Excel.Workbook workbook = null;44 Microsoft.Office.Interop.Excel.Worksheet worksheet = null;45 workbook = repExcel.Application.Workbooks.Open(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);46 worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];47 object htmlFile = savePath + wordFileName + ".html";48 object ofmt = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;49 workbook.SaveAs(htmlFile, ofmt, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);50 object osave = false;51 workbook.Close(osave, Type.Missing, Type.Missing);52 repExcel.Quit();53 }54 /// <summary>55 /// ppt转成Html56 /// </summary>57 /// <param name="path">要转换的文档的路径</param>58 /// <param name="savePath">转换成html的保存路径</param>59 /// <param name="wordFileName">转换成html的文件名字</param>60 public static void PPT2Html(string path, string savePath, string wordFileName)61 {62 Microsoft.Office.Interop.PowerPoint.Application ppApp = new Microsoft.Office.Interop.PowerPoint.Application();63 string strSourceFile = path;64 string strDestinationFile = savePath + wordFileName + ".html";65 Microsoft.Office.Interop.PowerPoint.Presentation prsPres = ppApp.Presentations.Open(strSourceFile, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse);66 67 prsPres.SaveAs(strDestinationFile, Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsHTML, MsoTriState.msoTrue);68 prsPres.Close();69 ppApp.Quit();70 }71 }72 }
1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Office2Html.aspx.cs" Inherits="Wolfy.OfficePreview.Office2Html" %> 2 3 <!DOCTYPE html> 4 5 <html xmlns="http://www.w3.org/1999/xhtml"> 6 <head runat="server"> 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 8 <title></title> 9 </head>10 <body>11 <form id="form1" runat="server">12 <div>13 <asp:Button Text="Word转Html" ID="btnWord" runat="server" CommandArgument="docx" OnClick="btnWord_Click" />14 <asp:Button ID="btnExcel" Text="Excel转Html" runat="server" CommandArgument="xlsx" OnClick="btnWord_Click" />15 <asp:Button ID="btnPPT" Text="PPT转Html" runat="server" CommandArgument="ppt" OnClick="btnWord_Click" />16 </div>17 </form>18 </body>19 </html>
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 namespace Wolfy.OfficePreview 9 {10 public partial class Office2Html : System.Web.UI.Page11 {12 protected void Page_Load(object sender, EventArgs e)13 {14 15 }16 protected void btnWord_Click(object sender, EventArgs e)17 {18 Button btn = sender as Button;19 switch (btn.CommandArgument)20 {21 case "docx":22 Office2HtmlHelper.Word2Html(MapPath("/Doc/分析某网站的SEO策略(外链篇).doc"), MapPath("/Html/"), "分析某网站的SEO策略(外链篇)");23 break;24 case "xlsx":25 Office2HtmlHelper.Excel2Html(MapPath("/Excel/1994-2013北京市历年最低工资标准.xlsx"), MapPath("/Html/"), "1994-2013北京市历年最低工资标准");26 break;27 case "ppt":28 Office2HtmlHelper.PPT2Html(MapPath("/PPT/23种设计模式详解.ppt"), MapPath("/Html/"), "23种设计模式详解");29 break;30 default:31 break;32 }33 }34 }35 }
测试结果:
这里为了测试特找了含有图片的office文档,浏览正常:
要求:机器需安装office,并且office环境是纯净的,所谓纯净就是不能有多个版本,lz曾经在电脑上安装过wps,被害苦了总是报如下错误:
报这个错误,只能哭了,网上的关于00046的解决办法都尝试了,不行。然后不得不重新安装office,然后笑了。最好安装office完整版,因为原来装的不是完整版,不知道有没有这方面的原因,也没有测试,建议完整版。
方案三
office文档转PDF,PDF转swf,使用flexpaper+swftools实现在线浏览。
在操作office2007时,需安装SaveAsPDFandXPS.exe ,安装成功后,如图所示:
只有安装了SaveAsPDFandXPS.exe,程序操作office文档,才有office文档另存为pdf文件。office2010不需要安装了,内置有这个功能。
核心代码:
测试结果:
此方案office转pdf文件的过程的要求与方案二要求相同。
pdf转换完成后,就可以将pdf转换为swf,使用flexpaper+swftools实现在线浏览了,可参考我之前的一篇文章:
FlexPaper+SWFTool+操作类=在线预览PDF
方案四
office文档直接转换为swf,使用flexpaper+swftool实现在先浏览。
office直接转换为swf,这里使用flashpaper来实现:
FlashPaper是一个虚拟打印机,可将word文件直接转化成swf格式文件(.doc.xls .txt .pdf等文件都可以正常生成SWF格式)。
这里只贴出核心代码:
1 using System; 2 using System.Collections.Generic; 3 using System.Diagnostics; 4 using System.Linq; 5 using System.Web; 6 using System.Web.UI; 7 using System.Web.UI.WebControls; 8 9 namespace Wolfy.OfficePreview10 {11 public partial class Office2Swf : System.Web.UI.Page12 {13 protected void Page_Load(object sender, EventArgs e)14 {15 16 }17 protected void btnWord_Click(object sender, EventArgs e)18 {19 Button btn = sender as Button;20 switch (btn.CommandArgument)21 {22 case "docx":23 ConvertOffice2Swf(MapPath("/Doc/分析某网站的SEO策略(外链篇).doc"), MapPath("/SWF/分析某网站的SEO策略(外链篇).swf"));24 break;25 case "xlsx":26 Office2PDFHelper.XLSConvertToPDF(MapPath("/Excel/1994-2013北京市历年最低工资标准.xlsx"), MapPath("/SWF/1994-2013北京市历年最低工资标准.swf"));27 break;28 case "ppt":29 Office2PDFHelper.PPTConvertToPDF(MapPath("/PPT/23种设计模式详解.ppt"), MapPath("/SWF/23种设计模式详解.swf"));30 break;31 default:32 break;33 }34 }35 /// <summary>36 /// office 转swf37 /// </summary>38 /// <param name="officePath">要转换的office文档路径</param>39 /// <param name="swfPath">转换后swf的路径</param>40 private void ConvertOffice2Swf(string officePath, string swfPath)41 {42 Process process = new Process(); //创建进程对象 43 ProcessStartInfo startInfo = new ProcessStartInfo();44 string paperroot = @"C:\Program Files\Macromedia\FlashPaper 2\FlashPrinter.exe";//这里是FlashPrinter的路径45 string docFile = officePath;46 string swfFile = swfPath;47 startInfo.FileName = paperroot;48 startInfo.Arguments = docFile + " -o " + swfFile;49 startInfo.UseShellExecute = false; //不使用系统外壳程序启动 50 startInfo.RedirectStandardInput = false; //不重定向输入 51 startInfo.RedirectStandardOutput = false; //重定向输出 52 startInfo.CreateNoWindow = true; //不创建窗口 53 process.StartInfo = startInfo;54 process.Start(); 55 if (process != null)56 process.Close();57 58 }59 }60 }
鉴于测试时,flashpaper在将office文档转换为swf的时候,在使用flexpaper的浏览时,出现转换的内容为空,猜测:flexpaper能打开的swf文件与flashpaper转的swf文件不兼容。最后使用flashpaper将office文档转换为pdf,然后走方案三,pdf转swf的步骤。另外本地测试时,没问题。将项目部署在IIS上,不能浏览,出现卡死的情况,调试发现,文件太大,在office还没完全转换为pdf的情况下,swftool工具就去寻找pdf文件,出现错误。
IIS上,无法浏览,查询网上解决方案,和权限这块有关,按照步骤设置了,未果,有点遗憾。
方案五
使用点聚公司的weboffice控件,测试后发现兼容性较差,放弃。有兴趣的可以研究一下。
方案六
office转pdf后,直接浏览器打开,此方案鉴于目前主流浏览器都集成adobe reader功能,可实现直接打开PDF文件。将pdf文件链接可直接打开。
必要条件:本地需安装adobe reader类似软件。
总结
鉴于项目情况选择一个适合的方案,其中有方案只是曲线救国,但是同样能达到要求。如果您觉得对你有所帮助,不妨推荐一下,让更多的人都能看到,谢谢你能看到文章最后。
参考文章:
http://www.cnblogs.com/expectszc/archive/2012/04/04/2432149.html
http://www.cnblogs.com/lexlin/articles/2478027.html
http://www.cnblogs.com/gossip/p/3473024.html
http://www.cnblogs.com/expectszc/archive/2012/04/04/2432149.html
- [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!
- [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!(续)
- [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!(续)
- [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!
- [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你
- [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!
- 常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!
- 常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!
- asp.net实现word、excel、ppt、pdf在线预览
- 【顶级推荐】NET-Word、Excel、PPT、PDF在线预览解决方案
- Asp.net MVC 利用(aspose+pdfobject.js) 实现在线预览word、excel、ppt、pdf文件
- Asp.Net Word、Excel转PDF在线预览
- ASP.NET MVC在线预览Excel、Word、TXT、PDF文件
- 总有一款适合你 --- 开发实用在线小工具
- Word Excel PPT在线预览
- ASP.NET Word Excel PDF 预览
- .net 实现word、excel、ppt、pdf预览功能
- Atitit.office word excel ppt pdf 的web在线预览方案与html转换方案 attilax 总结
- OC基础数据类型-NSDictionary
- C++第11周(春)项目4 - 类族的设计
- FATFS文件系统的移植
- Android编程之SparseArray<E>详解
- 【二分搜索】
- [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!
- 经验之谈
- 网站内容与网站结构是seo终极策略
- select框对div的一些应用
- 品牌诊断研究的内容
- IOS崩溃 异常处理(NSSetUncaughtExceptionHandler)
- oracle 11g 协议适配器错误
- Java英文单词Java基础常见英语词汇
- SQL Server 中统计每个数据表的大小