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