C#兑现office文档转换为PDF或xps的一些方法

C#实现office文档转换为PDF或xps的一些方法

这段时间一直在研究office文档转为PDF或xps格式的方法。查找了一些资料。
一下是我所知道的一些方法
代码支持任意office格式
需要安装office 2007 还有一个office2007的插件OfficeSaveAsPDFandXPS
下载地址
[url]http://www.microsoft.com/downloads/details.aspx?FamilyId=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=en[/url]
这是一个微软官方出的office插件。
安装好之后,打开VS,以VS2005为例
新建windows应用程序项目
添加以下com组件的引用
Microsoft Word 12.0 Object Library
Microsoft PowerPoint 12.0 Object Library
Microsoft Excel 12.0 Object Library
 
------------------------------------------------------
using Word = Microsoft.Office.Interop.Word;
using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;
 
我们可以使用一个枚举类型来决定生成文件的类型
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;
 
这里Word跟Excel我使用了ExportAsFixedFormat,PowerPoint我使用了SaveAs方法。
对于Word跟PowerPoint效果是一样的,只是SaveAs方法支持的格式更多。
但是Excel似乎不支持SaveAs方法,呵呵
----------------
Word转换方法
C#兑现office文档转换为PDF或xps的一些方法private bool Convert(string sourcePath, string targetPath, Word.WdExportFormat exportFormat) 
C#兑现office文档转换为PDF或xps的一些方法                { 
C#兑现office文档转换为PDF或xps的一些方法                        bool result; 
C#兑现office文档转换为PDF或xps的一些方法                        object paramMissing = Type.Missing; 
C#兑现office文档转换为PDF或xps的一些方法                        Word.ApplicationClass wordApplication = new Word.ApplicationClass(); 
C#兑现office文档转换为PDF或xps的一些方法                        Word.Document wordDocument = null
C#兑现office文档转换为PDF或xps的一些方法                        try 
C#兑现office文档转换为PDF或xps的一些方法                        { 
C#兑现office文档转换为PDF或xps的一些方法                                object paramSourceDocPath = sourcePath; 
C#兑现office文档转换为PDF或xps的一些方法                                string paramExportFilePath = targetPath; 
C#兑现office文档转换为PDF或xps的一些方法 
C#兑现office文档转换为PDF或xps的一些方法                                Word.WdExportFormat paramExportFormat = exportFormat; 
C#兑现office文档转换为PDF或xps的一些方法                                bool paramOpenAfterExport = false
C#兑现office文档转换为PDF或xps的一些方法                                Word.WdExportOptimizeFor paramExportOptimizeFor = 
C#兑现office文档转换为PDF或xps的一些方法                                        Word.WdExportOptimizeFor.wdExportOptimizeForPrint; 
C#兑现office文档转换为PDF或xps的一些方法                                Word.WdExportRange paramExportRange = Word.WdExportRange.wdExportAllDocument; 
C#兑现office文档转换为PDF或xps的一些方法                                int paramStartPage = 0; 
C#兑现office文档转换为PDF或xps的一些方法                                int paramEndPage = 0; 
C#兑现office文档转换为PDF或xps的一些方法                                Word.WdExportItem paramExportItem = Word.WdExportItem.wdExportDocumentContent; 
C#兑现office文档转换为PDF或xps的一些方法                                bool paramIncludeDocProps = true
C#兑现office文档转换为PDF或xps的一些方法                                bool paramKeepIRM = true
C#兑现office文档转换为PDF或xps的一些方法                                Word.WdExportCreateBookmarks paramCreateBookmarks = 
C#兑现office文档转换为PDF或xps的一些方法                                        Word.WdExportCreateBookmarks.wdExportCreateWordBookmarks; 
C#兑现office文档转换为PDF或xps的一些方法                                bool paramDocStructureTags = true
C#兑现office文档转换为PDF或xps的一些方法                                bool paramBitmapMissingFonts = true
C#兑现office文档转换为PDF或xps的一些方法                                bool paramUseISO19005_1 = false
C#兑现office文档转换为PDF或xps的一些方法 
C#兑现office文档转换为PDF或xps的一些方法                                wordDocument = wordApplication.Documents.Open( 
C#兑现office文档转换为PDF或xps的一些方法                                        ref paramSourceDocPath, ref paramMissing, ref paramMissing, 
C#兑现office文档转换为PDF或xps的一些方法                                        ref paramMissing, ref paramMissing, ref paramMissing, 
C#兑现office文档转换为PDF或xps的一些方法                                        ref paramMissing, ref paramMissing, ref paramMissing, 
C#兑现office文档转换为PDF或xps的一些方法                                        ref paramMissing, ref paramMissing, ref paramMissing, 
C#兑现office文档转换为PDF或xps的一些方法                                        ref paramMissing, ref paramMissing, ref paramMissing, 
C#兑现office文档转换为PDF或xps的一些方法                                        ref paramMissing); 
C#兑现office文档转换为PDF或xps的一些方法 
C#兑现office文档转换为PDF或xps的一些方法                                if (wordDocument != null
C#兑现office文档转换为PDF或xps的一些方法                                        wordDocument.ExportAsFixedFormat(paramExportFilePath, 
C#兑现office文档转换为PDF或xps的一些方法                                                paramExportFormat, paramOpenAfterExport, 
C#兑现office文档转换为PDF或xps的一些方法                                                paramExportOptimizeFor, paramExportRange, paramStartPage, 
C#兑现office文档转换为PDF或xps的一些方法                                                paramEndPage, paramExportItem, paramIncludeDocProps, 
C#兑现office文档转换为PDF或xps的一些方法                                                paramKeepIRM, paramCreateBookmarks, paramDocStructureTags, 
C#兑现office文档转换为PDF或xps的一些方法                                                paramBitmapMissingFonts, paramUseISO19005_1, 
C#兑现office文档转换为PDF或xps的一些方法                                                ref paramMissing); 
C#兑现office文档转换为PDF或xps的一些方法                                result = true
C#兑现office文档转换为PDF或xps的一些方法                        } 
C#兑现office文档转换为PDF或xps的一些方法                        finally 
C#兑现office文档转换为PDF或xps的一些方法                        { 
C#兑现office文档转换为PDF或xps的一些方法                                if (wordDocument != null
C#兑现office文档转换为PDF或xps的一些方法                                { 
C#兑现office文档转换为PDF或xps的一些方法                                        wordDocument.Close(ref paramMissing, ref paramMissing, ref paramMissing); 
C#兑现office文档转换为PDF或xps的一些方法                                        wordDocument = null
C#兑现office文档转换为PDF或xps的一些方法                                } 
C#兑现office文档转换为PDF或xps的一些方法                                if (wordApplication != null
C#兑现office文档转换为PDF或xps的一些方法                                { 
C#兑现office文档转换为PDF或xps的一些方法                                        wordApplication.Quit(ref paramMissing, ref paramMissing, ref paramMissing); 
C#兑现office文档转换为PDF或xps的一些方法                                        wordApplication = null
C#兑现office文档转换为PDF或xps的一些方法                                } 
C#兑现office文档转换为PDF或xps的一些方法                                GC.Collect(); 
C#兑现office文档转换为PDF或xps的一些方法                                GC.WaitForPendingFinalizers(); 
C#兑现office文档转换为PDF或xps的一些方法                                GC.Collect(); 
C#兑现office文档转换为PDF或xps的一些方法                                GC.WaitForPendingFinalizers(); 
C#兑现office文档转换为PDF或xps的一些方法                        } 
C#兑现office文档转换为PDF或xps的一些方法                        return result; 
C#兑现office文档转换为PDF或xps的一些方法                }
Excel转换方法
C#兑现office文档转换为PDF或xps的一些方法private bool Convert(string sourcePath, string targetPath, XlFixedFormatType targetType) 
C#兑现office文档转换为PDF或xps的一些方法                { 
C#兑现office文档转换为PDF或xps的一些方法                        bool result; 
C#兑现office文档转换为PDF或xps的一些方法                        object missing = Type.Missing; 
C#兑现office文档转换为PDF或xps的一些方法                        ApplicationClass application = null
C#兑现office文档转换为PDF或xps的一些方法                        Workbook workBook = null
C#兑现office文档转换为PDF或xps的一些方法                        try 
C#兑现office文档转换为PDF或xps的一些方法                        { 
C#兑现office文档转换为PDF或xps的一些方法                                application = new ApplicationClass(); 
C#兑现office文档转换为PDF或xps的一些方法                                object target = targetPath; 
C#兑现office文档转换为PDF或xps的一些方法                                object type = targetType; 
C#兑现office文档转换为PDF或xps的一些方法                                workBook = application.Workbooks.Open(sourcePath, missing, missing, missing, missing, missing, 
C#兑现office文档转换为PDF或xps的一些方法                                        missing, missing, missing, missing, missing, missing, missing, missing, missing); 
C#兑现office文档转换为PDF或xps的一些方法 
C#兑现office文档转换为PDF或xps的一些方法                                workBook.ExportAsFixedFormat(targetType, target, XlFixedFormatQuality.xlQualityStandard, truefalse, missing, missing, missing, missing); 
C#兑现office文档转换为PDF或xps的一些方法                                result = true
C#兑现office文档转换为PDF或xps的一些方法                        } 
C#兑现office文档转换为PDF或xps的一些方法                        catch 
C#兑现office文档转换为PDF或xps的一些方法                        { 
C#兑现office文档转换为PDF或xps的一些方法                                result = false
C#兑现office文档转换为PDF或xps的一些方法                        } 
C#兑现office文档转换为PDF或xps的一些方法                        finally 
C#兑现office文档转换为PDF或xps的一些方法                        { 
C#兑现office文档转换为PDF或xps的一些方法                                if (workBook != null
C#兑现office文档转换为PDF或xps的一些方法                                { 
C#兑现office文档转换为PDF或xps的一些方法                                        workBook.Close(true, missing, missing); 
C#兑现office文档转换为PDF或xps的一些方法                                        workBook = null
C#兑现office文档转换为PDF或xps的一些方法                                } 
C#兑现office文档转换为PDF或xps的一些方法                                if (application != null
C#兑现office文档转换为PDF或xps的一些方法                                { 
C#兑现office文档转换为PDF或xps的一些方法                                        application.Quit(); 
C#兑现office文档转换为PDF或xps的一些方法                                        application = null
C#兑现office文档转换为PDF或xps的一些方法                                } 
C#兑现office文档转换为PDF或xps的一些方法                                GC.Collect(); 
C#兑现office文档转换为PDF或xps的一些方法                                GC.WaitForPendingFinalizers(); 
C#兑现office文档转换为PDF或xps的一些方法                                GC.Collect(); 
C#兑现office文档转换为PDF或xps的一些方法                                GC.WaitForPendingFinalizers(); 
C#兑现office文档转换为PDF或xps的一些方法                        } 
C#兑现office文档转换为PDF或xps的一些方法                        return result; 
C#兑现office文档转换为PDF或xps的一些方法                }
PowerPoint转换方法
C#兑现office文档转换为PDF或xps的一些方法                private bool Convert(string sourcePath, string targetPath, PpSaveAsFileType targetFileType) 
C#兑现office文档转换为PDF或xps的一些方法                { 
C#兑现office文档转换为PDF或xps的一些方法                        bool result; 
C#兑现office文档转换为PDF或xps的一些方法                        object missing = Type.Missing; 
C#兑现office文档转换为PDF或xps的一些方法                        ApplicationClass application = null
C#兑现office文档转换为PDF或xps的一些方法                        Presentation persentation = null
C#兑现office文档转换为PDF或xps的一些方法                        try 
C#兑现office文档转换为PDF或xps的一些方法                        { 
C#兑现office文档转换为PDF或xps的一些方法                                application = new ApplicationClass(); 
C#兑现office文档转换为PDF或xps的一些方法                                persentation = application.Presentations.Open(sourcePath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse); 
C#兑现office文档转换为PDF或xps的一些方法                                persentation.SaveAs(targetPath, targetFileType, Microsoft.Office.Core.MsoTriState.msoTrue); 
C#兑现office文档转换为PDF或xps的一些方法 
C#兑现office文档转换为PDF或xps的一些方法                                result = true
C#兑现office文档转换为PDF或xps的一些方法                        } 
C#兑现office文档转换为PDF或xps的一些方法                        catch 
C#兑现office文档转换为PDF或xps的一些方法                        { 
C#兑现office文档转换为PDF或xps的一些方法                                result = false
C#兑现office文档转换为PDF或xps的一些方法                        } 
C#兑现office文档转换为PDF或xps的一些方法                        finally 
C#兑现office文档转换为PDF或xps的一些方法                        { 
C#兑现office文档转换为PDF或xps的一些方法                                if (persentation != null
C#兑现office文档转换为PDF或xps的一些方法                                { 
C#兑现office文档转换为PDF或xps的一些方法                                        persentation.Close(); 
C#兑现office文档转换为PDF或xps的一些方法                                        persentation = null
C#兑现office文档转换为PDF或xps的一些方法                                } 
C#兑现office文档转换为PDF或xps的一些方法                                if (application != null
C#兑现office文档转换为PDF或xps的一些方法                                { 
C#兑现office文档转换为PDF或xps的一些方法                                        application.Quit(); 
C#兑现office文档转换为PDF或xps的一些方法                                        application = null
C#兑现office文档转换为PDF或xps的一些方法                                } 
C#兑现office文档转换为PDF或xps的一些方法                                GC.Collect(); 
C#兑现office文档转换为PDF或xps的一些方法                                GC.WaitForPendingFinalizers(); 
C#兑现office文档转换为PDF或xps的一些方法                                GC.Collect(); 
C#兑现office文档转换为PDF或xps的一些方法                                GC.WaitForPendingFinalizers(); 
C#兑现office文档转换为PDF或xps的一些方法                        } 
C#兑现office文档转换为PDF或xps的一些方法                        return result; 
C#兑现office文档转换为PDF或xps的一些方法                }
 
如果是word文档或者Excel文档想要转换xps格式,我们还可以有一种方法,那就是利用xps虚拟打印机实现。
安装了.NetFrameWork3.5之后,默认会在系统中安装XPS虚拟打印机,我们将其设置为默认打印机。
Microsoft XPS Document Writer
word文档打印为xps
C#兑现office文档转换为PDF或xps的一些方法                public void PrintWord(string wordfile) 
C#兑现office文档转换为PDF或xps的一些方法                { 
C#兑现office文档转换为PDF或xps的一些方法                        oWord.ApplicationClass word = new oWord.ApplicationClass(); 
C#兑现office文档转换为PDF或xps的一些方法                        Type wordType = word.GetType(); 
C#兑现office文档转换为PDF或xps的一些方法 
C#兑现office文档转换为PDF或xps的一些方法                        //打开WORD文档 
C#兑现office文档转换为PDF或xps的一些方法                        oWord.Documents docs = word.Documents; 
C#兑现office文档转换为PDF或xps的一些方法                        Type docsType = docs.GetType(); 
C#兑现office文档转换为PDF或xps的一些方法                        object objDocName = wordfile; 
C#兑现office文档转换为PDF或xps的一些方法                        oWord.Document doc = (oWord.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { objDocName, truetrue }); 
C#兑现office文档转换为PDF或xps的一些方法 
C#兑现office文档转换为PDF或xps的一些方法                        //打印输出到指定文件 
C#兑现office文档转换为PDF或xps的一些方法                        //可以使用 doc.PrintOut();方法,次方法调用中的参数设置较繁琐,建议使用 Type.InvokeMember 来调用时可以不用将PrintOut的参数设置全,只设置4个主要参数 
C#兑现office文档转换为PDF或xps的一些方法                        Type docType = doc.GetType(); 
C#兑现office文档转换为PDF或xps的一些方法                        object printFileName = wordfile + ".xps"
C#兑现office文档转换为PDF或xps的一些方法                        docType.InvokeMember("PrintOut", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { falsefalse, oWord.WdPrintOutRange.wdPrintAllDocument, printFileName }); 
C#兑现office文档转换为PDF或xps的一些方法 
C#兑现office文档转换为PDF或xps的一些方法                        //退出WORD 
C#兑现office文档转换为PDF或xps的一些方法                        wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null); 
C#兑现office文档转换为PDF或xps的一些方法                }
Excel利用虚拟打印机转换为xps
C#兑现office文档转换为PDF或xps的一些方法                public void PrintExcel(string execlfile) 
C#兑现office文档转换为PDF或xps的一些方法                { 
C#兑现office文档转换为PDF或xps的一些方法                        Excel.ApplicationClass eapp = new Excel.ApplicationClass(); 
C#兑现office文档转换为PDF或xps的一些方法                        Type eType = eapp.GetType(); 
C#兑现office文档转换为PDF或xps的一些方法                        Excel.Workbooks Ewb = eapp.Workbooks; 
C#兑现office文档转换为PDF或xps的一些方法                        Type elType = Ewb.GetType(); 
C#兑现office文档转换为PDF或xps的一些方法                        object objelName = execlfile; 
C#兑现office文档转换为PDF或xps的一些方法                        Excel.Workbook ebook = (Excel.Workbook)elType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, Ewb, new Object[] { objelName, truetrue }); 
C#兑现office文档转换为PDF或xps的一些方法 
C#兑现office文档转换为PDF或xps的一些方法                        object printFileName = execlfile + ".xps"
C#兑现office文档转换为PDF或xps的一些方法 
C#兑现office文档转换为PDF或xps的一些方法                        Object oMissing = System.Reflection.Missing.Value; 
C#兑现office文档转换为PDF或xps的一些方法                        ebook.PrintOut(oMissing, oMissing, oMissing, oMissing, oMissing, true, oMissing, printFileName); 
C#兑现office文档转换为PDF或xps的一些方法 
C#兑现office文档转换为PDF或xps的一些方法                        eType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, eapp, null); 
C#兑现office文档转换为PDF或xps的一些方法                }
,同样,如果系统安装了PDF虚拟打印机,如5D PDF之类的,我们也可以将其设置为默认打印机以达到转换为PDF格式的目的
我们可以将这些方法放在windows service里面,实现文档的后台转换。

本文出自 “Sean Li 技术成就梦想!” 博客,请务必保留此出处http://seanli888.blog.51cto.com/345958/112268