[Asp.net]常見word,excel,ppt,pdf在線預覽方案(轉)

引言

以前項目須要,查找了office文檔在線預覽的解決方案,順便記錄一下,方便之後查詢。html

方案一

直接在瀏覽器中打開Office文檔在頁面上的連接。會彈出以下窗口:web

 

優勢:主流瀏覽器都支持。設計模式

缺點:Office文檔連接在瀏覽器中打開,會有如上圖的提示,需用戶本身選擇打開或者保存功能,若是客戶電腦上安裝迅雷下載軟件,會啓動迅雷下載,用戶體驗很差。瀏覽器

方案二

office文檔轉html,首先引入com組件中office庫,而後在程序集擴展中引入word,excel,ppt的dll。工具

 

而後F6生成,會報以下錯誤:post

解決辦法:測試

office文檔轉換html輔助類:flex

  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文檔,瀏覽正常:url

 要求:機器需安裝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 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

相關文章
相關標籤/搜索