首页 > 其他 > 详细

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

时间:2014-03-08 16:17:57      阅读:443      评论:0      收藏:0      [点我收藏+]

源博客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转换方法
bubuko.com,布布扣private bool Convert(string sourcePath, string targetPath, Word.WdExportFormat exportFormat) 
bubuko.com,布布扣                { 
bubuko.com,布布扣                        bool result; 
bubuko.com,布布扣                        object paramMissing = Type.Missing; 
bubuko.com,布布扣                        Word.ApplicationClass wordApplication = new Word.ApplicationClass(); 
bubuko.com,布布扣                        Word.Document wordDocument = null
bubuko.com,布布扣                        try 
bubuko.com,布布扣                        { 
bubuko.com,布布扣                                object paramSourceDocPath = sourcePath; 
bubuko.com,布布扣                                string paramExportFilePath = targetPath; 
bubuko.com,布布扣 
bubuko.com,布布扣                                Word.WdExportFormat paramExportFormat = exportFormat; 
bubuko.com,布布扣                                bool paramOpenAfterExport = false
bubuko.com,布布扣                                Word.WdExportOptimizeFor paramExportOptimizeFor = 
bubuko.com,布布扣                                        Word.WdExportOptimizeFor.wdExportOptimizeForPrint; 
bubuko.com,布布扣                                Word.WdExportRange paramExportRange = Word.WdExportRange.wdExportAllDocument; 
bubuko.com,布布扣                                int paramStartPage = 0; 
bubuko.com,布布扣                                int paramEndPage = 0; 
bubuko.com,布布扣                                Word.WdExportItem paramExportItem = Word.WdExportItem.wdExportDocumentContent; 
bubuko.com,布布扣                                bool paramIncludeDocProps = true
bubuko.com,布布扣                                bool paramKeepIRM = true
bubuko.com,布布扣                                Word.WdExportCreateBookmarks paramCreateBookmarks = 
bubuko.com,布布扣                                        Word.WdExportCreateBookmarks.wdExportCreateWordBookmarks; 
bubuko.com,布布扣                                bool paramDocStructureTags = true
bubuko.com,布布扣                                bool paramBitmapMissingFonts = true
bubuko.com,布布扣                                bool paramUseISO19005_1 = false
bubuko.com,布布扣 
bubuko.com,布布扣                                wordDocument = wordApplication.Documents.Open( 
bubuko.com,布布扣                                        ref paramSourceDocPath, ref paramMissing, ref paramMissing, 
bubuko.com,布布扣                                        ref paramMissing, ref paramMissing, ref paramMissing, 
bubuko.com,布布扣                                        ref paramMissing, ref paramMissing, ref paramMissing, 
bubuko.com,布布扣                                        ref paramMissing, ref paramMissing, ref paramMissing, 
bubuko.com,布布扣                                        ref paramMissing, ref paramMissing, ref paramMissing, 
bubuko.com,布布扣                                        ref paramMissing); 
bubuko.com,布布扣 
bubuko.com,布布扣                                if (wordDocument != null
bubuko.com,布布扣                                        wordDocument.ExportAsFixedFormat(paramExportFilePath, 
bubuko.com,布布扣                                                paramExportFormat, paramOpenAfterExport, 
bubuko.com,布布扣                                                paramExportOptimizeFor, paramExportRange, paramStartPage, 
bubuko.com,布布扣                                                paramEndPage, paramExportItem, paramIncludeDocProps, 
bubuko.com,布布扣                                                paramKeepIRM, paramCreateBookmarks, paramDocStructureTags, 
bubuko.com,布布扣                                                paramBitmapMissingFonts, paramUseISO19005_1, 
bubuko.com,布布扣                                                ref paramMissing); 
bubuko.com,布布扣                                result = true
bubuko.com,布布扣                        } 
bubuko.com,布布扣                        finally 
bubuko.com,布布扣                        { 
bubuko.com,布布扣                                if (wordDocument != null
bubuko.com,布布扣                                { 
bubuko.com,布布扣                                        wordDocument.Close(ref paramMissing, ref paramMissing, ref paramMissing); 
bubuko.com,布布扣                                        wordDocument = null
bubuko.com,布布扣                                } 
bubuko.com,布布扣                                if (wordApplication != null
bubuko.com,布布扣                                { 
bubuko.com,布布扣                                        wordApplication.Quit(ref paramMissing, ref paramMissing, ref paramMissing); 
bubuko.com,布布扣                                        wordApplication = null
bubuko.com,布布扣                                } 
bubuko.com,布布扣                                GC.Collect(); 
bubuko.com,布布扣                                GC.WaitForPendingFinalizers(); 
bubuko.com,布布扣                                GC.Collect(); 
bubuko.com,布布扣                                GC.WaitForPendingFinalizers(); 
bubuko.com,布布扣                        } 
bubuko.com,布布扣                        return result; 
bubuko.com,布布扣                }
Excel转换方法
bubuko.com,布布扣private bool Convert(string sourcePath, string targetPath, XlFixedFormatType targetType) 
bubuko.com,布布扣                { 
bubuko.com,布布扣                        bool result; 
bubuko.com,布布扣                        object missing = Type.Missing; 
bubuko.com,布布扣                        ApplicationClass application = null
bubuko.com,布布扣                        Workbook workBook = null
bubuko.com,布布扣                        try 
bubuko.com,布布扣                        { 
bubuko.com,布布扣                                application = new ApplicationClass(); 
bubuko.com,布布扣                                object target = targetPath; 
bubuko.com,布布扣                                object type = targetType; 
bubuko.com,布布扣                                workBook = application.Workbooks.Open(sourcePath, missing, missing, missing, missing, missing, 
bubuko.com,布布扣                                        missing, missing, missing, missing, missing, missing, missing, missing, missing); 
bubuko.com,布布扣 
bubuko.com,布布扣                                workBook.ExportAsFixedFormat(targetType, target, XlFixedFormatQuality.xlQualityStandard, truefalse, missing, missing, missing, missing); 
bubuko.com,布布扣                                result = true
bubuko.com,布布扣                        } 
bubuko.com,布布扣                        catch 
bubuko.com,布布扣                        { 
bubuko.com,布布扣                                result = false
bubuko.com,布布扣                        } 
bubuko.com,布布扣                        finally 
bubuko.com,布布扣                        { 
bubuko.com,布布扣                                if (workBook != null
bubuko.com,布布扣                                { 
bubuko.com,布布扣                                        workBook.Close(true, missing, missing); 
bubuko.com,布布扣                                        workBook = null
bubuko.com,布布扣                                } 
bubuko.com,布布扣                                if (application != null
bubuko.com,布布扣                                { 
bubuko.com,布布扣                                        application.Quit(); 
bubuko.com,布布扣                                        application = null
bubuko.com,布布扣                                } 
bubuko.com,布布扣                                GC.Collect(); 
bubuko.com,布布扣                                GC.WaitForPendingFinalizers(); 
bubuko.com,布布扣                                GC.Collect(); 
bubuko.com,布布扣                                GC.WaitForPendingFinalizers(); 
bubuko.com,布布扣                        } 
bubuko.com,布布扣                        return result; 
bubuko.com,布布扣                }
PowerPoint转换方法
bubuko.com,布布扣                private bool Convert(string sourcePath, string targetPath, PpSaveAsFileType targetFileType) 
bubuko.com,布布扣                { 
bubuko.com,布布扣                        bool result; 
bubuko.com,布布扣                        object missing = Type.Missing; 
bubuko.com,布布扣                        ApplicationClass application = null
bubuko.com,布布扣                        Presentation persentation = null
bubuko.com,布布扣                        try 
bubuko.com,布布扣                        { 
bubuko.com,布布扣                                application = new ApplicationClass(); 
bubuko.com,布布扣                                persentation = application.Presentations.Open(sourcePath, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse); 
bubuko.com,布布扣                                persentation.SaveAs(targetPath, targetFileType, Microsoft.Office.Core.MsoTriState.msoTrue); 
bubuko.com,布布扣 
bubuko.com,布布扣                                result = true
bubuko.com,布布扣                        } 
bubuko.com,布布扣                        catch 
bubuko.com,布布扣                        { 
bubuko.com,布布扣                                result = false
bubuko.com,布布扣                        } 
bubuko.com,布布扣                        finally 
bubuko.com,布布扣                        { 
bubuko.com,布布扣                                if (persentation != null
bubuko.com,布布扣                                { 
bubuko.com,布布扣                                        persentation.Close(); 
bubuko.com,布布扣                                        persentation = null
bubuko.com,布布扣                                } 
bubuko.com,布布扣                                if (application != null
bubuko.com,布布扣                                { 
bubuko.com,布布扣                                        application.Quit(); 
bubuko.com,布布扣                                        application = null
bubuko.com,布布扣                                } 
bubuko.com,布布扣                                GC.Collect(); 
bubuko.com,布布扣                                GC.WaitForPendingFinalizers(); 
bubuko.com,布布扣                                GC.Collect(); 
bubuko.com,布布扣                                GC.WaitForPendingFinalizers(); 
bubuko.com,布布扣                        } 
bubuko.com,布布扣                        return result; 
bubuko.com,布布扣                }
 
如果是word文档或者Excel文档想要转换xps格式,我们还可以有一种方法,那就是利用xps虚拟打印机实现。
安装了.NetFrameWork3.5之后,默认会在系统中安装XPS虚拟打印机,我们将其设置为默认打印机。
Microsoft XPS Document Writer
word文档打印为xps
bubuko.com,布布扣                public void PrintWord(string wordfile) 
bubuko.com,布布扣                { 
bubuko.com,布布扣                        oWord.ApplicationClass word = new oWord.ApplicationClass(); 
bubuko.com,布布扣                        Type wordType = word.GetType(); 
bubuko.com,布布扣 
bubuko.com,布布扣                        //打开WORD文档 
bubuko.com,布布扣                        oWord.Documents docs = word.Documents; 
bubuko.com,布布扣                        Type docsType = docs.GetType(); 
bubuko.com,布布扣                        object objDocName = wordfile; 
bubuko.com,布布扣                        oWord.Document doc = (oWord.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { objDocName, truetrue }); 
bubuko.com,布布扣 
bubuko.com,布布扣                        //打印输出到指定文件 
bubuko.com,布布扣                        //可以使用 doc.PrintOut();方法,次方法调用中的参数设置较繁琐,建议使用 Type.InvokeMember 来调用时可以不用将PrintOut的参数设置全,只设置4个主要参数 
bubuko.com,布布扣                        Type docType = doc.GetType(); 
bubuko.com,布布扣                        object printFileName = wordfile + ".xps"
bubuko.com,布布扣                        docType.InvokeMember("PrintOut", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { falsefalse, oWord.WdPrintOutRange.wdPrintAllDocument, printFileName }); 
bubuko.com,布布扣 
bubuko.com,布布扣                        //退出WORD 
bubuko.com,布布扣                        wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null); 
bubuko.com,布布扣                }
Excel利用虚拟打印机转换为xps
bubuko.com,布布扣                public void PrintExcel(string execlfile) 
bubuko.com,布布扣                { 
bubuko.com,布布扣                        Excel.ApplicationClass eapp = new Excel.ApplicationClass(); 
bubuko.com,布布扣                        Type eType = eapp.GetType(); 
bubuko.com,布布扣                        Excel.Workbooks Ewb = eapp.Workbooks; 
bubuko.com,布布扣                        Type elType = Ewb.GetType(); 
bubuko.com,布布扣                        object objelName = execlfile; 
bubuko.com,布布扣                        Excel.Workbook ebook = (Excel.Workbook)elType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, Ewb, new Object[] { objelName, truetrue }); 
bubuko.com,布布扣 
bubuko.com,布布扣                        object printFileName = execlfile + ".xps"
bubuko.com,布布扣 
bubuko.com,布布扣                        Object oMissing = System.Reflection.Missing.Value; 
bubuko.com,布布扣                        ebook.PrintOut(oMissing, oMissing, oMissing, oMissing, oMissing, true, oMissing, printFileName); 
bubuko.com,布布扣 
bubuko.com,布布扣                        eType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, eapp, null); 
bubuko.com,布布扣                }
,同样,如果系统安装了PDF虚拟打印机,如5D PDF之类的,我们也可以将其设置为默认打印机以达到转换为PDF格式的目的
我们可以将这些方法放在windows service里面,实现文档的后台转换。

C#实现office文档转换为PDF或xps的一些方法( 转),布布扣,bubuko.com

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

原文:http://www.cnblogs.com/ymj126/p/3588096.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!