程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#實現MS-Office文檔轉Pdf(Word、Execel、PowerPoint、Visio、Project)

C#實現MS-Office文檔轉Pdf(Word、Execel、PowerPoint、Visio、Project)

編輯:C#入門知識

直接奉上源代碼,運行環境:Office2010,Project2010(如果需要),Visio2010(如果需要),.net framework2.0   [csharp]   using System;   using Microsoft.Office.Core;      namespace Office   {       class Util       {           private Util() { }           /// <summary>           /// 把Word文件轉換成為PDF格式文件           /// </summary>           /// <param name="sourcePath">源文件路徑</param>           /// <param name="targetPath">目標文件路徑</param>            /// <returns>true=轉換成功</returns>           public static bool WordToPDF(string sourcePath, string targetPath)           {               bool result = false;               Microsoft.Office.Interop.Word.WdExportFormat exportFormat = Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF;               Microsoft.Office.Interop.Word.ApplicationClass application = null;                  Microsoft.Office.Interop.Word.Document document = null;               try               {                   application = new Microsoft.Office.Interop.Word.ApplicationClass();                   application.Visible = false;                   document = application.Documents.Open(sourcePath);                   document.SaveAs2();                   document.ExportAsFixedFormat(targetPath, exportFormat);                   result = true;               }               catch (Exception e)               {                   Console.WriteLine(e.Message);                   result = false;               }               finally               {                   if (document != null)                   {                       document.Close();                       document = null;                   }                   if (application != null)                   {                       application.Quit();                       application = null;                   }                   GC.Collect();                   GC.WaitForPendingFinalizers();                   GC.Collect();                   GC.WaitForPendingFinalizers();               }               return result;           }              /// <summary>           /// 把Microsoft.Office.Interop.Excel文件轉換成PDF格式文件           /// </summary>           /// <param name="sourcePath">源文件路徑</param>           /// <param name="targetPath">目標文件路徑</param>            /// <returns>true=轉換成功</returns>           public static bool ExcelToPDF(string sourcePath, string targetPath)           {               bool result = false;               Microsoft.Office.Interop.Excel.XlFixedFormatType targetType = Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF;               object missing = Type.Missing;               Microsoft.Office.Interop.Excel.ApplicationClass application = null;               Microsoft.Office.Interop.Excel.Workbook workBook = null;               try               {                   application = new Microsoft.Office.Interop.Excel.ApplicationClass();                   application.Visible = false;                   workBook = application.Workbooks.Open(sourcePath);                   workBook.SaveAs();                   workBook.ExportAsFixedFormat(targetType, targetPath);                   result = true;               }               catch (Exception e)               {                   Console.WriteLine(e.Message);                   result = false;               }               finally               {                   if (workBook != null)                   {                       workBook.Close(true, missing, missing);                       workBook = null;                   }                   if (application != null)                   {                       application.Quit();                       application = null;                   }                   GC.Collect();                   GC.WaitForPendingFinalizers();                   GC.Collect();                   GC.WaitForPendingFinalizers();               }               return result;           }           /// <summary>           /// 把PowerPoint文件轉換成PDF格式文件           /// </summary>           /// <param name="sourcePath">源文件路徑</param>           /// <param name="targetPath">目標文件路徑</param>            /// <returns>true=轉換成功</returns>           public static bool PowerPointToPDF(string sourcePath, string targetPath)           {               bool result;               Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType targetFileType = Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsPDF;               object missing = Type.Missing;               Microsoft.Office.Interop.PowerPoint.ApplicationClass application = null;               Microsoft.Office.Interop.PowerPoint.Presentation persentation = null;               try               {                   application = new Microsoft.Office.Interop.PowerPoint.ApplicationClass();                   //application.Visible = MsoTriState.msoFalse;                   persentation = application.Presentations.Open(sourcePath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);                   persentation.SaveAs(targetPath, targetFileType, Microsoft.Office.Core.MsoTriState.msoTrue);                      result = true;               }               catch(Exception e)               {                   Console.WriteLine(e.Message);                   result = false;               }               finally               {                   if (persentation != null)                   {                       persentation.Close();                       persentation = null;                   }                   if (application != null)                   {                       application.Quit();                       application = null;                   }                   GC.Collect();                   GC.WaitForPendingFinalizers();                   GC.Collect();                   GC.WaitForPendingFinalizers();               }               return result;           }              /// <summary>           /// 把Visio文件轉換成PDF格式文件           /// </summary>           /// <param name="sourcePath">源文件路徑</param>           /// <param name="targetPath">目標文件路徑</param>            /// <returns>true=轉換成功</returns>           public static bool VisioToPDF(string sourcePath, string targetPath)           {               bool result;               Microsoft.Office.Interop.Visio.VisFixedFormatTypes targetType = Microsoft.Office.Interop.Visio.VisFixedFormatTypes.visFixedFormatPDF;               object missing = Type.Missing;               Microsoft.Office.Interop.Visio.ApplicationClass application = null;               Microsoft.Office.Interop.Visio.Document document = null;               try               {                   application = new Microsoft.Office.Interop.Visio.ApplicationClass();                   application.Visible = false;                   document = application.Documents.Open(sourcePath);                   document.Save();                   document.ExportAsFixedFormat(targetType, targetPath, Microsoft.Office.Interop.Visio.VisDocExIntent.visDocExIntentScreen, Microsoft.Office.Interop.Visio.VisPrintOutRange.visPrintAll);                   result = true;               }               catch (Exception e)               {                   Console.WriteLine(e.Message);                   result = false;               }               finally               {                   if (application != null)                   {                       application.Quit();                       application = null;                   }                   GC.Collect();                   GC.WaitForPendingFinalizers();                   GC.Collect();                   GC.WaitForPendingFinalizers();               }               return result;           }              /// <summary>           /// 把Project文件轉換成PDF格式文件           /// </summary>           /// <param name="sourcePath">源文件路徑</param>           /// <param name="targetPath">目標文件路徑</param>            /// <returns>true=轉換成功</returns>           public static bool ProjectToPDF(string sourcePath, string targetPath)           {               bool result;               object missing = Type.Missing;               Microsoft.Office.Interop.MSProject.ApplicationClass application = null;               try               {                   application = new Microsoft.Office.Interop.MSProject.ApplicationClass();                   application.Visible = false;                   application.FileOpenEx(sourcePath);                   application.DocumentExport(targetPath,Microsoft.Office.Interop.MSProject.PjDocExportType.pjPDF);                   result = true;  www.2cto.com             }               catch (Exception e)               {                   Console.WriteLine(e.Message);                   result = false;               }               finally               {                   if (application != null)                   {                       application.DocClose();                       application.Quit();                       application = null;                   }                   GC.Collect();                   GC.WaitForPendingFinalizers();                   GC.Collect();                   GC.WaitForPendingFinalizers();               }               return result;           }       }   }     如果需要將Publish等其他文檔進行轉碼,或者將文檔轉為其他格式(如xps),參照以上代碼就可以了。原理其實很簡單,比如說word2010,只要點擊另存為,就會出現很多格式供你選擇,這裡正是調用了此接口。 嘗試過使用Apache的OpenOffice進行轉碼,Word、Execel、Ppt勉強還可以轉換(沒有復雜圖形),但效果也不好,其他的文檔類型,OpenOffice根本無能為力,後來為了簡單起見,就使用了原生態的Office接口。   轉碼的用途(好處):可以在浏覽器直接預覽文檔(由於項目組文檔共享的需要,於是就開發了這麼個玩意,配合WebServer,在文件上傳後就立即進行轉碼,以後點擊該文檔,就返回轉碼後的文檔,浏覽器就可以直接浏覽,很方便~)   本文地址   小小總結一下   采用C#的好處:100%完美轉碼,Perfect!不足:只能部署在windows服務器~   采用OpenOffice的好處:跨平台。不足:轉碼效果不理想~     提醒   以上是核心代碼,在調用過程中,可能會出現以下問題導致轉碼失敗:   1.文檔被占用,解決方法:在轉碼前先復制一份,然後對副本進行轉碼~   2.文檔損壞,解決方法:修復後再轉~   3.文檔帶有密碼,解決方法:未嘗試~   4.……

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved