1.安裝組件OfficeSaveAsPDFandXPS
需要安裝office 2007 還有一個office2007的插件OfficeSaveAsPDFandXPS
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;
#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
權限配置第一種方案:
在組件在服務器中添加權限
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