環境:VS2013, Office2010
網絡上扒下代碼如下,親測可用(只測試了Office2010);
建立一個VC控制檯非空工程,修改相應代碼,具體工程見資源:https://download.csdn.net/download/awlp1990/12317681;
完整代碼如下:
#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
#include <atlbase.h>
#include <atlstr.h>
#include <atlcom.h>
//導入Office類型庫
#import "C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\OFFICE14\\MSO.DLL" \
rename("RGB", "MSORGB")
// 導入VB的類型庫
#import "C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB"
//導入Word的類型庫
#import "D:\\Program Files (x86)\\Microsoft Office\\Office14\\MSWORD.OLB" \
rename("ExitWindows", "WordExitWindows") \
rename("FindText", "WordFindText")
#import "D:\\Program Files (x86)\\Microsoft Office\\Office14\\MSPPT.OLB"
#import "D:\Program Files (x86)\Microsoft Office\\Office14\\EXCEL.EXE" \
rename("DialogBox","_DialogBox") \
rename("RGB","_RGB") \
exclude("IFont","IPicture")
//// 導入Excel的類型庫
//#import "D:\\Program Files (x86)\\Microsoft Office\\Office14\\EXCEL.EXE" \
// rename("RGB", "ExcelRGB") \
// rename("ReplaceText", "ExcelReplaceText") \
// rename("CopyFile", "ExcelCopyFile") \
// rename("DialogBox", "ExcelDialogBox") \
// no_auto_exclude
//實現
int Word2Pdf(std::wstring inputFileName, std::wstring outputFileName)
{
int nRet = 0;
Word::_ApplicationPtr pWordApp = NULL;
Word::_DocumentPtr pDoc = NULL;
HRESULT hr = S_OK;
BSTR szBstrOutputFileName;
szBstrOutputFileName = SysAllocString(outputFileName.c_str());
hr = pWordApp.CreateInstance(__uuidof(Word::Application));
if (hr != S_OK)
{
return 1;
}
Word::DocumentsPtr pDocs = NULL;
pWordApp->get_Documents(&pDocs);
if (pDocs == NULL)
{
nRet = 2;
goto _RELEASE_APP;
}
try
{
//只讀打開文件
pDoc = pDocs->Open(&(_variant_t(inputFileName.c_str())), &(_variant_t(false)), &(_variant_t(true)));
if (pDoc == NULL)
goto _RELEASE_APP;
pDoc->ExportAsFixedFormat(szBstrOutputFileName, Word::WdExportFormat::wdExportFormatPDF, VARIANT_FALSE,
Word::WdExportOptimizeFor::wdExportOptimizeForPrint, Word::WdExportRange::wdExportAllDocument, 1, 1,
Word::WdExportItem::wdExportDocumentContent, VARIANT_TRUE, VARIANT_TRUE,
Word::WdExportCreateBookmarks::wdExportCreateNoBookmarks, VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE);
pDoc->Close();
pDoc.Release();
pDoc = NULL;
}
catch (...)
{
nRet = 3;
}
_RELEASE_APP:
pWordApp->Quit();
pWordApp.Release();
pWordApp = NULL;
return nRet;
}
int Excel2Pdf(std::wstring inputFileName, std::wstring outputFileName)
{
HRESULT hr = S_OK;
int nRet = 0;
Excel::_ApplicationPtr pApplication = NULL;
Excel::_WorkbookPtr pThisWorkbook = NULL;
BSTR szBstrInputFileName;
BSTR szBstrOutputFileName;
szBstrInputFileName = SysAllocString(inputFileName.c_str());
szBstrOutputFileName = SysAllocString(outputFileName.c_str());
if (FAILED(pApplication.CreateInstance(__uuidof(Excel::Application))))
{
wprintf(L"CreateInstance failed w/err 0x%08lx\n", hr);
return 1;
}
try
{
pThisWorkbook = pApplication->GetWorkbooks()->Open(szBstrInputFileName);
pThisWorkbook->ExportAsFixedFormat(Excel::XlFixedFormatType::xlTypePDF, szBstrOutputFileName);
pThisWorkbook->Close();
pThisWorkbook.Release();
pThisWorkbook = NULL;
}
catch (...)
{
nRet = 2;
}
pApplication->Quit();
pApplication.Release();
pApplication = NULL;
return nRet;
}
int Ppt2Pdf(std::wstring inputFileName, std::wstring outputFileName)
{
PowerPoint::_ApplicationPtr spPpApp = NULL;
PowerPoint::PresentationsPtr spPres = NULL;
PowerPoint::_PresentationPtr pPre = NULL;
BSTR szBstrInputFileName;
BSTR szBstrOutputFileName;
BSTR szBstrEmpty;
HRESULT hr = S_OK;
int nRet = 0;
szBstrInputFileName = SysAllocString(inputFileName.c_str());
szBstrOutputFileName = SysAllocString(outputFileName.c_str());
szBstrEmpty = SysAllocString(L"");
if (FAILED(spPpApp.CreateInstance(__uuidof(PowerPoint::Application))))
{
wprintf(L"CreateInstance failed w/err 0x%08lx\n", hr);
return 1;
}
spPres = spPpApp->Presentations;
if (spPres == NULL)
{
nRet = 2;
goto _RELEASE_APP;
}
try
{
pPre = spPres->Open(szBstrInputFileName,
Office::MsoTriState::msoTrue, Office::MsoTriState::msoFalse, Office::MsoTriState::msoFalse);
if (pPre == NULL)
{
nRet = 3;
goto _RELEASE_APP;
}
pPre->ExportAsFixedFormat(szBstrOutputFileName, PowerPoint::PpFixedFormatType::ppFixedFormatTypePDF,
PowerPoint::PpFixedFormatIntent::ppFixedFormatIntentPrint, Office::MsoTriState::msoTriStateMixed,
PowerPoint::PpPrintHandoutOrder::ppPrintHandoutHorizontalFirst, PowerPoint::PpPrintOutputType::ppPrintOutputSlides,
Office::MsoTriState::msoFalse, NULL, PowerPoint::PpPrintRangeType::ppPrintAll, szBstrEmpty,
VARIANT_TRUE, VARIANT_FALSE, VARIANT_TRUE, VARIANT_TRUE, VARIANT_FALSE);
pPre->Close();
pPre.Release();
pPre = NULL;
}
catch (...)
{
nRet = 4;
}
_RELEASE_APP:
spPpApp->Quit();
spPpApp.Release();
spPpApp = NULL;
return nRet;
}
int _tmain(int argc, _TCHAR* argv[])
{
if (argc < 3)
return -1;
std::wstring _strSrcPath = argv[1];
std::wstring _strDstPath = argv[2];
CoInitialize(nullptr);
//當前文檔的後綴..//TEXT();
std::wstring _suffix = _strSrcPath.substr(_strSrcPath.find_last_of(TEXT(".")) + 1);
if (_suffix == TEXT("doc") || _suffix == TEXT("docx"))
{
//轉換word文檔..
Word2Pdf(_strSrcPath, _strDstPath);
}
else
{
;
}
return 0;
}
//測試運行如下: