源博客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转换方法
private bool Convert(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; 
                }
Excel转换方法
private bool Convert(string sourcePath, string targetPath, XlFixedFormatType targetType) 
                { 
                        bool result; 
                        object missing = Type.Missing; 
                        ApplicationClass application = null; 
                        Workbook workBook = null; 
                        try 
                        { 
                                application = new 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; 
                }
PowerPoint转换方法
                private bool Convert(string sourcePath, string targetPath, PpSaveAsFileType targetFileType) 
                { 
                        bool result; 
                        object missing = Type.Missing; 
                        ApplicationClass application = null; 
                        Presentation persentation = null; 
                        try 
                        { 
                                application = new 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; 
                }
 
如果是word文档或者Excel文档想要转换xps格式,我们还可以有一种方法,那就是利用xps虚拟打印机实现。
安装了.NetFrameWork3.5之后,默认会在系统中安装XPS虚拟打印机,我们将其设置为默认打印机。
Microsoft XPS Document Writer
word文档打印为xps
                public void PrintWord(string wordfile) 
                { 
                        oWord.ApplicationClass word = new oWord.ApplicationClass(); 
                        Type wordType = word.GetType(); 
 
                        //打开WORD文档 
                        oWord.Documents docs = word.Documents; 
                        Type docsType = docs.GetType(); 
                        object objDocName = wordfile; 
                        oWord.Document doc = (oWord.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { objDocName, true, true }); 
 
                        //打印输出到指定文件 
                        //可以使用 doc.PrintOut();方法,次方法调用中的参数设置较繁琐,建议使用 Type.InvokeMember 来调用时可以不用将PrintOut的参数设置全,只设置4个主要参数 
                        Type docType = doc.GetType(); 
                        object printFileName = wordfile + ".xps"; 
                        docType.InvokeMember("PrintOut", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { false, false, oWord.WdPrintOutRange.wdPrintAllDocument, printFileName }); 
 
                        //退出WORD 
                        wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null); 
                }
Excel利用虚拟打印机转换为xps
                public void PrintExcel(string execlfile) 
                { 
                        Excel.ApplicationClass eapp = new Excel.ApplicationClass(); 
                        Type eType = eapp.GetType(); 
                        Excel.Workbooks Ewb = eapp.Workbooks; 
                        Type elType = Ewb.GetType(); 
                        object objelName = execlfile; 
                        Excel.Workbook ebook = (Excel.Workbook)elType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, Ewb, new Object[] { objelName, true, true }); 
 
                        object printFileName = execlfile + ".xps"; 
 
                        Object oMissing = System.Reflection.Missing.Value; 
                        ebook.PrintOut(oMissing, oMissing, oMissing, oMissing, oMissing, true, oMissing, printFileName); 
 
                        eType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, eapp, null); 
                }
,同样,如果系统安装了PDF虚拟打印机,如5D PDF之类的,我们也可以将其设置为默认打印机以达到转换为PDF格式的目的
我们可以将这些方法放在windows service里面,实现文档的后台转换。

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

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

    代码支持任意office格式 需要安装office 2007 还有一个office2007的插件OfficeSaveAsPDFandXPS 下载地址 [url]http://www.microsoft ...

  2. 在禅道中实现WORD等OFFICE文档转换为PDF进行在线浏览

    条件: 安装好禅道的服务器 能直接浏览PDF的浏览器(或通过 安装插件实现 ) 文档转换服务程序(建议部署在另一台服务器上)     实现 原理: 修改禅道的文件预览功能(OFFICE文档其使用的是下 ...

  3. C#实现office文档转换为PDF格式

    1.安装组件OfficeSaveAsPDFandXPS 需要安装office 2007 还有一个office2007的插件OfficeSaveAsPDFandXPS 下载地址   OfficeSave ...

  4. java使用jacob将office文档转换为PDF格式

    jacob 包下载地址: http://sourceforge.net/projects/jacob-project/ 下载后,将jacob 与 jacob-1.19-x64.dll放到安装jdk目录 ...

  5. office文档转pdf

    这里贴下代码吧,没啥好说的. using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  6. OFFICE 文档转换为html在线预览

    OFFICE 文档在线预览方案很多: 服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览,比如flexpaper Office文档直接转换为SWF,通过网页加载Flash预览 微软的 ...

  7. Java实现web在线预览office文档与pdf文档实例

    https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档 ...

  8. Java实现office文档与pdf文档的在线预览功能

    最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...

  9. 把office文档转换为html过程中的一些坑

    之前和我们项目的团队一起酝酿了一个项目,公司的业务文档技术文档比较多,但都比较分散,虽然通过FTP或其他方式聚合起来了,但感觉还是不够方便. 另外公司每次都来新员工,新员工都需要一些培训,比较耗时,比 ...

随机推荐

  1. [ionic开源项目教程] - 手把手教你使用移动跨平台开发框架Ionic开发一个新闻阅读APP

    前言 这是一个系列文章,从环境搭建开始讲解,包括网络数据请求,将持续更新到项目完结.实战开发中遇到的各种问题的解决方案,也都将毫无保留的分享给大家. 关注订阅号:TongeBlog ,查看移动端跨平台 ...

  2. UVa 673 Parentheses Balance【栈】

    题意:输入一个包含"()"和"[]"的序列,判断是否合法 用栈来模拟,遇到"(",“[”就入栈,遇到')',']'就取出栈顶元素看是否匹配, ...

  3. github每次推送都要输入用户名和密码

    /***************************************************************************** * github每次推送都要输入用户名和密 ...

  4. ecshop 分类树全部显示

    1.在page_header.lbi文件中加入 $GLOBALS['smarty']->assign('categories',get_categories_tree()); // 保证首页页面 ...

  5. over-fitting、under-fitting 与 regularization

    机器学习中一个重要的话题便是模型的泛化能力,泛化能力强的模型才是好模型,对于训练好的模型,若在训练集表现差,不必说在测试集表现同样会很差,这可能是欠拟合导致:若模型在训练集表现非常好,却在测试集上差强 ...

  6. 【英语】Bingo口语笔记(34) - Hit系列

    hit it off 合得来 hit the bottle 喝醉酒 hit the spot 正合要求,恰到好处

  7. 安装Oracle 11g RAC R2 之Linux DNS 配置

    Oracle 11g RAC 集群中引入了SCAN(Single Client Access Name)的概念,也就是指集群的单客户端访问名称.SCAN 这个特性为客户端提供了单一的主机名,用于访问集 ...

  8. Bootstrap--全局CSS样式之栅格系统

    Bootstrap 提供了一套响应式.移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列.它包含了易于使用的预定义类,还有强大的mixin 用于生成更具 ...

  9. Java Web 乱码

    1.mySql编码 2.jdbc编码 http://www.blogjava.net/NicholasEcho/archive/2008/11/03/238310.html ----- 1.HttpG ...

  10. MyEclipse8.5注册码 到2015年

    Subscriber: onechenProduct ID: E3MP (MyEclipse Professional Subscription)License version: 3.0Full Ma ...