excel,word,ppt,pdf,swf 文件互相轉換


轉自:  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 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM