// 源文件,类名Converter.cpp
#include "StdAfx.h"
#include "Converter.h"
CConverter::CConverter(void)
{
}
CConverter::~CConverter(void)
{
}
//
// Word转换成PDF
//
//
//
BOOL CConverter::Convert(CString strSourcePath, CString strTargetPath, MSWord::WdExportFormat wdExportFormat)
{
BOOL result = FALSE;
MSWord::_ApplicationPtr pWdApplicationPtr;
MSWord::_DocumentPtr pWdDocumentPtr;
COleVariant sourcePath = strSourcePath;
COleVariant targetPath = strTargetPath;
COleVariant vTrue((short)TRUE);
COleVariant vFalse((short)FALSE);
COleVariant vZero((short)0);
COleVariant vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CoInitialize(NULL);
try
{
HRESULT hResult = pWdApplicationPtr.CreateInstance("Word.Application");
if (hResult != S_OK)
{
AfxMessageBox(_T("Application创建失败,请确保安装了word 2000或以上版本!"), MB_OK|MB_ICONWARNING);
CoUninitialize();
return result;
}
pWdDocumentPtr = pWdApplicationPtr->Documents->Open(sourcePath,
vTrue, // Confirm Conversion.
vFalse, // ReadOnly.
vFalse, // AddToRecentFiles.
vOptional, // PasswordDocument.
vOptional, // PasswordTemplate.
vOptional, // Revert.
vOptional, // WritePasswordDocument.
vOptional, // WritePasswordTemplate.
vOptional, // Format. // Last argument for Word 97
vOptional, // Encoding // New for Word 2000/2002
vFalse, // visible
vOptional, // openAndRepair
vZero, // docDirection
vOptional, // NoEncodingDialog
vOptional);
//pWdDocumentPtr = pWdApplicationPtr->Documents->Open2000(sourcePath,
// vTrue, // Confirm Conversion.
// vFalse, // ReadOnly.
// vFalse, // AddToRecentFiles.
// vOptional, // PasswordDocument.
// vOptional, // PasswordTemplate.
// vOptional, // Revert.
// vOptional, // WritePasswordDocument.
// vOptional, // WritePasswordTemplate.
// vOptional, // Format. // Last argument for Word 97
// vOptional, // Encoding // New for Word 2000/2002
// vOptional); // Visible
if(pWdDocumentPtr == NULL)
{
CoUninitialize();
return result;
}
hResult = pWdDocumentPtr->ExportAsFixedFormat((_bstr_t )strTargetPath, // target path
wdExportFormat, // export format
FALSE, // Open After Export
wdExportOptimizeForPrint, // Export OptimizeFor
wdExportAllDocument, // Export Range
0, // start page
0, // end page
wdExportDocumentContent, // Export Item
TRUE, // Include Doc Props
TRUE, // Keep IRM
wdExportCreateWordBookmarks, // Export Create Bookmarks
TRUE, // Doc Structure Tags
TRUE, // Bitmap Missing Fonts
FALSE); // Use ISO19005_1
if (hResult == S_OK)
{
result = TRUE;
}
}
catch(CException* e)
{
TCHAR szError[1024];
e->GetErrorMessage(szError,1024); // e.GetErrorMessage(szError,1024);
AfxMessageBox(_T("WORD文档转PDF异常:") + (CString)szError);
}
if(pWdDocumentPtr != NULL)
{
pWdDocumentPtr->Close();
pWdDocumentPtr = NULL;
}
if(pWdApplicationPtr != NULL)
{
pWdApplicationPtr->Quit();
pWdApplicationPtr = NULL;
}
CoUninitialize();
return result;
}
//
// Excel转PDF
//
BOOL CConverter::Convert(CString strSourcePath, CString strTargetPath, MSExcel::XlFixedFormatType targetType)
{
BOOL result = FALSE;
MSExcel::_ApplicationPtr pEcApplicationPtr;
MSExcel::_WorkbookPtr pEcWorkbookPtr;
COleVariant sourcePath = strSourcePath;
COleVariant targetPath = strTargetPath;
COleVariant vTrue((short)TRUE);
COleVariant vFalse((short)FALSE);
COleVariant vZero((short)0);
COleVariant vTwo((short)2);
COleVariant vOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CoInitialize(NULL);
try
{
HRESULT hResult = pEcApplicationPtr.CreateInstance("Excel.Application");
if (hResult != S_OK)
{
AfxMessageBox(_T("Application创建失败,请确保安装了Excel 2000或以上版本!"), MB_OK|MB_ICONWARNING);
CoUninitialize();
return result;
}
pEcWorkbookPtr = pEcApplicationPtr->Workbooks->Open((_bstr_t )strSourcePath);
if(pEcWorkbookPtr == NULL)
{
CoUninitialize();
return result;
}
hResult = pEcWorkbookPtr->ExportAsFixedFormat(targetType, targetPath, xlQualityStandard, vTrue, vFalse); // Use ISO19005_1
if (hResult == S_OK)
{
result = TRUE;
}
}
catch(CException* e)
{
TCHAR szError[1024];
e->GetErrorMessage(szError,1024); // e.GetErrorMessage(szError,1024);
AfxMessageBox(_T("EXCEL文档转PDF异常:") + (CString)szError);
}
if(pEcWorkbookPtr != NULL)
{
pEcWorkbookPtr->Close();
pEcWorkbookPtr = NULL;
}
if(pEcApplicationPtr != NULL)
{
pEcApplicationPtr->Quit();
pEcApplicationPtr = NULL;
}
CoUninitialize();
return result;
}
//
// PPT转PDF
//
BOOL CConverter::Convert(CString strSourcePath, CString strTargetPath, MSPpt::PpSaveAsFileType targetType)
{
BOOL result = FALSE;
MSPpt::_ApplicationPtr pPtApplicationPtr;
MSPpt::_PresentationPtr pPtPresentationPtr;
CoInitialize(NULL);
try
{
HRESULT hResult = pPtApplicationPtr.CreateInstance("PowerPoint.Application");
if (hResult != S_OK)
{
AfxMessageBox(_T("Application创建失败,请确保安装了PowerPoint 2000或以上版本!"), MB_OK|MB_ICONWARNING);
CoUninitialize();
return result;
}
Presentations *pPresentations = NULL;
_Presentation *g_pPresentation = NULL;
pPtApplicationPtr->get_Presentations(&pPresentations);
if(pPresentations == NULL)
{
CoUninitialize();
return result;
}
pPtPresentationPtr = pPresentations->Open(_bstr_t(strSourcePath), msoFalse, msoFalse, msoFalse);
if(pPtPresentationPtr == NULL)
{
CoUninitialize();
return result;
}
hResult = pPtPresentationPtr->SaveAs((_bstr_t )strTargetPath, targetType, msoTrue);
if (hResult == S_OK)
{
result = TRUE;
}
}
catch(CException* e)
{
TCHAR szError[1024];
e->GetErrorMessage(szError,1024); // e.GetErrorMessage(szError,1024);
AfxMessageBox(_T("PPT文档转PDF异常:") + (CString)szError);
}
if(pPtPresentationPtr != NULL)
{
pPtPresentationPtr->Close();
pPtPresentationPtr = NULL;
}
if(pPtApplicationPtr != NULL)
{
pPtApplicationPtr->Quit();
pPtApplicationPtr = NULL;
}
CoUninitialize();
return result;
}
//
// 根据类型转不同格式的Office文件到PDF
//
BOOL CConverter::Convert(CString strSourcePath, CString strTargetPath, FormatType formatType)
{
BOOL result = FALSE;
switch (formatType)
{
case ConvertWord:
result = Convert(strSourcePath, strTargetPath, wdExportFormatPDF);
break;
case ConvertExcel:
result = Convert(strSourcePath, strTargetPath, xlTypePDF);
break;
case ConvertPPT:
result = Convert(strSourcePath, strTargetPath, ppSaveAsPDF);
break;
}
return result;
}
// 头文件,类名Converter.h
#pragma once
//#pragma region Import the type libraries
#import "C://Program Files//Common Files//Microsoft Shared//OFFICE14//MSO.DLL" /
rename("RGB", "MSORGB") /
rename("DocumentProperties", "MSODocumentProperties")
using namespace Office;
#import "C://Program Files//Common Files//Microsoft Shared//VBA//VBA6//VBE6EXT.OLB"
using namespace VBIDE;
#import "C://Program Files//Microsoft Office//Office14//MSWORD.OLB" rename_namespace("MSWord") /
auto_search /
auto_rename /
no_auto_exclude /
rename("ExitWindows", "WordExitWindows")
#import "C://Program Files//Microsoft Office//Office14//EXCEL.EXE" rename_namespace("MSExcel") /
rename("DialogBox", "ExcelDialogBox") /
rename("RGB", "ExcelRGB") /
rename("CopyFile", "ExcelCopyFile") /
rename("ReplaceText", "ExcelReplaceText") /
no_auto_exclude
#import "C://Program Files//Microsoft Office//OFFICE14//MSPPT.OLB"/
rename_namespace("MSPpt"), auto_rename, auto_search, rename("ExitWindows", "WordExitWindows")
#pragma endregion
using namespace MSWord;
using namespace MSExcel;
using namespace MSPpt;
enum FormatType
{
ConvertWord,
ConvertExcel,
ConvertPPT
};
class CConverter
{
public:
CConverter(void);
~CConverter(void);
static BOOL Convert(CString strSourcePath, CString strTargetPath, MSWord::WdExportFormat wdExportFormat);
static BOOL Convert(CString strSourcePath, CString strTargetPath, MSExcel::XlFixedFormatType targetType);
static BOOL Convert(CString strSourcePath, CString strTargetPath, MSPpt::PpSaveAsFileType targetType);
static BOOL Convert(CString strSourcePath, CString strTargetPath, FormatType formatType);
};