zoukankan      html  css  js  c++  java
  • [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!

    转载于:http://www.cnblogs.com/wolf-sun/p/3569960.html

    引言

    之前项目需要,查找了office文档在线预览的解决方案,顺便记录一下,方便以后查询。

    方案一

    直接在浏览器中打开Office文档在页面上的链接。会弹出如下窗口:

     

    优点:主流浏览器都支持。

    缺点:Office文档链接在浏览器中打开,会有如上图的提示,需用户自己选择打开或者保存功能,如果客户电脑上安装迅雷下载软件,会启动迅雷下载,用户体验不好。

    方案二

    office文档转html,首先引入com组件中office库,然后在程序集扩展中引入word,excel,ppt的dll。

     

    然后F6生成,会报如下错误:

    解决办法:

    office文档转换html辅助类:

     Office2HtmlHelper
     Office2Html.aspx
    复制代码
     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.Page
    11     {
    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不需要安装了,内置有这个功能。

     核心代码:

     Office2PDFHelper
     Office2PDF
     Office2PDF.aspx

    测试结果:

     

    此方案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.OfficePreview
    10 {
    11     public partial class Office2Swf : System.Web.UI.Page
    12     {
    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 转swf
    37         /// </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 FilesMacromediaFlashPaper 2FlashPrinter.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

  • 相关阅读:
    Atitit Server Side Include  ssi服务端包含规范 csi  esi
    Atitit 动态按钮图片背景颜色与文字组合解决方案
    Atitit 图像扫描器---基于扫描线
    Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic
    Atitit usrqbg1834 html的逻辑化流程化 规范标准化解决方案
    Atitit  J2EE平台相关规范--39个  3.J2SE平台相关规范--42个
    Atitit jsr规范化分类 attilax总结
    Atitit attilax总结的对于attilax重要的jsr规范,以及需要增加的jsr规范
    Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js
    Atitit jsr规范有多少个  407个。Jsr规范大全
  • 原文地址:https://www.cnblogs.com/llhhll/p/3587849.html
Copyright © 2011-2022 走看看