您的位置:首页 > 编程语言 > C#

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

2017-08-23 18:03 896 查看
代码支持任意office格式

 
需要安装office 2007 还有一个office2007的插件OfficeSaveAsPDFandXPS

 
下载地址

 
http:
//www.microsoft.com/downloads/details.aspx?FamilyId=4D951911-3E7E-4AE6-B059-A2E79ED87041&displaylang=en

 
这是一个微软官方出的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的一些方法(http://blog.csdn.net/kable999/article/details/4786654
点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: