1. 程式人生 > >常見word,excel,ppt,pdf線上預覽方案,有圖有真相,總有一款適合你!

常見word,excel,ppt,pdf線上預覽方案,有圖有真相,總有一款適合你!

引言

之前專案需要,查找了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.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不需要安裝了,內建有這個功能。

 核心程式碼:

Office2PDFHelper Office2PDF Office2PDF.aspx

測試結果:

 

此方案office轉pdf檔案的過程的要求與方案二要求相同。

pdf轉換完成後,就可以將pdf轉換為swf,使用flexpaper+swftools實現線上瀏覽了,可參考我之前的一篇文章:

方案四

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://blogs.office.com/2013/04/10/office-web-viewer-view-office-documents-in-a-browser/

總結

鑑於專案情況選擇一個適合的方案,其中有方案只是曲線救國,但是同樣能達到要求。如果您覺得對你有所幫助,不妨推薦一下,讓更多的人都能看到,謝謝你能看到文章最後。

參考文章: