C#實現office文檔轉換爲PDF格式

 1.安裝組件OfficeSaveAsPDFandXPS

需要安裝office 2007 還有一個office2007的插件OfficeSaveAsPDFandXPS

下載地址
  office 2007     鏈接: http://pan.baidu.com/s/1eSeQD38  密碼:j5qy
 
這是一個微軟官方出的office插件。
 
 
2.安裝好之後,打開VS,以VS2013爲例
2.1添加以下組件的引用
「項目」--「引用」--「添加引用..」--在程序集中搜索"Microsoft",找到如下3個dll
Microsoft.Office.Interop.Word
Microsoft.Office.Interop.PowerPoint
microsoft.office.interop.Excel

 

dll成功引入後,項目的引用裏面則會出現相應的dll控件名稱。

 

修改上圖中3個dll的屬性"嵌入互操作類型"爲False

 

引入dll:Microsoft.Office.Core

文件版本爲15.0.5031.1000

該dll的文件名稱爲OFFICE.DLL

 即可看到如下圖的dll已引入成功

 

 

2.2相應類文件頂部添加以下組件的引用

using Word = Microsoft.Office.Interop.Word;
using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;
using System;
using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Interop.Word;

 
我們可以使用一個枚舉類型來決定生成文件的類型
Word.WdExportFormat wd = Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF;
Excel.XlFixedFormatType excelType = Microsoft.Office.Interop.Excel.XlFixedFormatType.xlTypePDF;
PowerPoint.PpSaveAsFileType ppType = Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsPDF;
 
2.3相應類文件中的轉換代碼
        #region office文件轉換爲pdf文件
         
        /// <summary>
        /// 將word文檔轉換成PDF格式
        /// </summary>
        /// <param name="sourcePath">源文件路徑</param>
        /// <param name="targetPath">目標文件路徑</param> 
        /// <param name="exportFormat"></param>
        /// <returns></returns>
        private bool WordConvertPDF(string sourcePath, string targetPath, Word.WdExportFormat exportFormat)
        {
            bool result;
            object paramMissing = Type.Missing;
            Word.ApplicationClass wordApplication = new Word.ApplicationClass();  
            Word.Document wordDocument = null;
            try
            {
                object paramSourceDocPath = sourcePath;
                string paramExportFilePath = targetPath;

                Word.WdExportFormat paramExportFormat = exportFormat;
                bool paramOpenAfterExport = false;
                Word.WdExportOptimizeFor paramExportOptimizeFor =
                        Word.WdExportOptimizeFor.wdExportOptimizeForPrint;
                Word.WdExportRange paramExportRange = Word.WdExportRange.wdExportAllDocument;
                int paramStartPage = 0;
                int paramEndPage = 0;
                Word.WdExportItem paramExportItem = Word.WdExportItem.wdExportDocumentContent;
                bool paramIncludeDocProps = true;
                bool paramKeepIRM = true;
                Word.WdExportCreateBookmarks paramCreateBookmarks =
                        Word.WdExportCreateBookmarks.wdExportCreateWordBookmarks;
                bool paramDocStructureTags = true;
                bool paramBitmapMissingFonts = true;
                bool paramUseISO19005_1 = false;

                wordDocument = wordApplication.Documents.Open(
                        ref paramSourceDocPath, ref paramMissing, ref paramMissing,
                        ref paramMissing, ref paramMissing, ref paramMissing,
                        ref paramMissing, ref paramMissing, ref paramMissing,
                        ref paramMissing, ref paramMissing, ref paramMissing,
                        ref paramMissing, ref paramMissing, ref paramMissing,
                        ref paramMissing);

                if (wordDocument != null)
                    wordDocument.ExportAsFixedFormat(paramExportFilePath,
                            paramExportFormat, paramOpenAfterExport,
                            paramExportOptimizeFor, paramExportRange, paramStartPage,
                            paramEndPage, paramExportItem, paramIncludeDocProps,
                            paramKeepIRM, paramCreateBookmarks, paramDocStructureTags,
                            paramBitmapMissingFonts, paramUseISO19005_1,
                            ref paramMissing);
                result = true;
            }
            finally
            {
                if (wordDocument != null)
                {
                    wordDocument.Close(ref paramMissing, ref paramMissing, ref paramMissing);
                    wordDocument = null;
                }
                if (wordApplication != null)
                {
                    wordApplication.Quit(ref paramMissing, ref paramMissing, ref paramMissing);
                    wordApplication = null;
                }
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
            return result;
        }
  
        /// <summary>
        /// 將excel文檔轉換成PDF格式
        /// </summary>
        /// <param name="sourcePath">源文件路徑</param>
        /// <param name="targetPath">目標文件路徑</param> 
        /// <param name="targetType"></param>
        /// <returns></returns>
        private bool ExcelConvertPDF(string sourcePath, string targetPath, XlFixedFormatType targetType)
        {
            bool result;
            object missing = Type.Missing;
            Excel.ApplicationClass application = null;
            Workbook workBook = null;
            try
            {
                application = new Excel.ApplicationClass();
                object target = targetPath;
                object type = targetType;
                workBook = application.Workbooks.Open(sourcePath, missing, missing, missing, missing, missing,
                        missing, missing, missing, missing, missing, missing, missing, missing, missing);

                workBook.ExportAsFixedFormat(targetType, target, XlFixedFormatQuality.xlQualityStandard, true, false, missing, missing, missing, missing);
                result = true;
            }
            catch
            {
                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>
        /// 將ppt文檔轉換成pdf格式
        /// </summary>
        /// <param name="sourcePath">源文件路徑</param>
        /// <param name="targetPath">目標文件路徑</param> 
        /// <param name="targetFileType"></param>
        /// <returns></returns>
        private bool PPTConvertPDF(string sourcePath, string targetPath, PpSaveAsFileType targetFileType)
        {
            bool result;
            object missing = Type.Missing;
            PowerPoint.ApplicationClass application = null;
            Presentation persentation = null;
            try
            {
                application = new PowerPoint.ApplicationClass();
                persentation = application.Presentations.Open(sourcePath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse);
                persentation.SaveAs(targetPath, targetFileType, Microsoft.Office.Core.MsoTriState.msoTrue);

                result = true;
            }
            catch
            {
                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;
        }

        #endregion
View Code

 

權限配置第一種方案:

在組件在服務器中添加權限

單擊 開始,單擊 運行, 然後鍵入 DCOMCNFG。選擇要自動運行的應用程序。應用程序名稱如下所示:
Microsoft Access 97 - Microsoft Access 數據庫
Microsoft Access 2000/2002 - Microsoft Access 應用程序
Microsoft Excel 97/2000/2002 - Microsoft Excel 應用程序
Microsoft Word 97 - Microsoft Word Basic
Microsoft Word 2000/2002 - Microsoft Word 文檔
單擊 屬性打開此應用程序的屬性對話框。
 

1)標示—運行此應用程序的用戶賬戶—下列用戶;然後輸入Administrator用戶組中的一個用戶。

注:更改服務器中組件服務所用到的用戶密碼時,須在組件中重新輸入新的密碼,才能正常生成Word。

2)安全—啓動和**權限,選擇「自定義」,添加IIS_WPG用戶的本地啓動、本地**權限;

3)安全—訪問權限,選擇「自定義」,添加IIS_WPG用戶的本地訪問權限;

 

 權限配置第二種方案:

對DCOM組件進行權限配置:

1、打開comexp.msc -32

2、Microsoft Excel Application、和Microsoft Word 97-2003 Document屬性裏面進行配置,如下:

  標識:設爲「交互式用戶」

  安全:啓動和**權限添加「NETWORK SERVICE」,勾選本地啓動和本地**,訪問權限添加類似

 

以上兩點設置完成後還有問題,繼續以下操作:

3、應用進程池標識轉換爲「LocalSystem」

4、在C:/Windows/System32/config/systemprofile和C:/Windows/SysWOW64/config/systemprofile目錄下創建名爲Desktop目錄

 

出現的問題:發佈到服務器上後,WORD轉換沒問題,EXCEL轉換PDF時轉換卡住,只能生成temp的臨時文件,以下操作解決問題:

5、在DCOM組件的Microsoft Excel Application、和Microsoft Word 97-2003 Document屬性安全中額外添加「IIS_IUSRS」用戶組,權限跟之前的「NETWORL SERVICE」一樣

 

 引自:http://www.cnblogs.com/louby/p/7053262.html

 

 

另一功能:word文檔或者Excel文檔想要轉換xps格式

地址:https://blog.csdn.net/guochunyang/article/details/69549231

posted on 2018-05-10 14:25 永不言棄! 閱讀( ...) 評論( ...) 編輯 收藏