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

时间:2023-11-10 10:24:20

源博客http://blog.csdn.net/kable999/article/details/4786654

代码支持任意office格式
需要安装office 2007 还有一个office2007的插件OfficeSaveAsPDFandXPS
下载地址
这是一个微软官方出的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, true, false, 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, true, true }); 
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[] { false, false, 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, true, true }); 
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里面,实现文档的后台转换。