VC 如何调用Acrobat 将office文件(word、excel、ppt)转为pdf

时间:2022-11-28 06:40:14
本地已经安装Adobe Acrobat11.0和office,想通过在VC中调用Acrobat的接口API函数,将任意一个office文件转换为pdf文件,查过一些例子,几乎都是C#的,VC的又该如何做呢?在这先谢啦!希望做过的大侠不吝赐教!

10 个解决方案

#1


等待......

#2


和C#差不多吧,就是使用COM控件的方式不同而已

#3


谢谢楼上的答复!我找到过一段VC的代码,如下,但是提示CPDFMakerApp没有定义,看C#中是直接把PDFMakerAPI.dll引入了,但在VC++中却不行,不知该如何做:
BOOL Doc2PDF(LPCTSTR lpszSrcDoc, LPCTSTR lpszDstPDF) 
{     
HRESULT hr;     
CLSID clsid;     
IUnknown* pUnk = NULL;     
IDispatch *pDispApp = NULL;

if (!PathFileExists(lpszSrcDoc))         
return FALSE;     
CLSIDFromProgID(L"PDFMakerAPI.PDFMakerApp", &clsid);     
hr = ::GetActiveObject(clsid,NULL,&pUnk);     
if (FAILED(hr)) //          
hr = ::CoCreateInstance( clsid, NULL, CLSCTX_SERVER, IID_IUnknown, (void**) &pUnk);     
if (SUCCEEDED(hr))     
{         
hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDispApp);         
if (FAILED(hr))         
{             
pUnk->Release();             
return FALSE;         
}         
COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);         
COleVariant covFalse((short)FALSE);         
COleVariant vTrue((short)TRUE);         
CPDFMakerApp maker; 
maker.AttachDispatch(pDispApp,FALSE);         
/*SAFEARRAY *ar[2];         
ar[0] = SafeArrayCreateVector(VT_BSTR,0,1);         
ar[1] = SafeArrayCreateVector(VT_BSTR,0,1);         
_bstr_t a(lpszSrcDoc);         
_bstr_t b(lpszDstPDF);         
LONG rgIndices = 0;         
SafeArrayPutElement(ar[0],&rgIndices,(BSTR)a);         
rgIndices = 0;         
SafeArrayPutElement(ar[1],&rgIndices,(BSTR)b);*/        
long ret = 1;         
do 
{             
ret = maker.CreatePDF(lpszSrcDoc,lpszDstPDF,vOpt,covFalse,vTrue,covFalse,vOpt);             
Sleep(100);         
} while(ret != 0);                   
//ret = maker.CreatePDFFromMultipleFiles(ar);         
//SafeArrayDestroy(ar[0]);         
//SafeArrayDestroy(ar[1]);         
pDispApp->Release();        
pUnk->Release();         
return ret;     
}     
return FALSE; 
}

#4


用loadlibrary 加载PDFMakerAPI.dll

#5


谢谢 shen_wei,我用LoadLibrary加载了,但没有效果啊?这个已经试过了。

#6


关注一下,我也有可能有这个需求

#7


你安装最新版的acrobat pdf,然后找到最新的这个DLL试试

#8


引用 5 楼 liuli7786 的回复:
谢谢 shen_wei,我用LoadLibrary加载了,但没有效果啊?这个已经试过了。


没有效果,有什么错误提示没?

#9


暂时没有什么好的解决办法,只能在C程序中调用C#生成的exe来对office文件来进行转换pdf。

#10


试试用COM的形式,把PDFMakerAPI.dll import进来,或者用工具生成tlb/tlh文件include

#1


等待......

#2


和C#差不多吧,就是使用COM控件的方式不同而已

#3


谢谢楼上的答复!我找到过一段VC的代码,如下,但是提示CPDFMakerApp没有定义,看C#中是直接把PDFMakerAPI.dll引入了,但在VC++中却不行,不知该如何做:
BOOL Doc2PDF(LPCTSTR lpszSrcDoc, LPCTSTR lpszDstPDF) 
{     
HRESULT hr;     
CLSID clsid;     
IUnknown* pUnk = NULL;     
IDispatch *pDispApp = NULL;

if (!PathFileExists(lpszSrcDoc))         
return FALSE;     
CLSIDFromProgID(L"PDFMakerAPI.PDFMakerApp", &clsid);     
hr = ::GetActiveObject(clsid,NULL,&pUnk);     
if (FAILED(hr)) //          
hr = ::CoCreateInstance( clsid, NULL, CLSCTX_SERVER, IID_IUnknown, (void**) &pUnk);     
if (SUCCEEDED(hr))     
{         
hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDispApp);         
if (FAILED(hr))         
{             
pUnk->Release();             
return FALSE;         
}         
COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);         
COleVariant covFalse((short)FALSE);         
COleVariant vTrue((short)TRUE);         
CPDFMakerApp maker; 
maker.AttachDispatch(pDispApp,FALSE);         
/*SAFEARRAY *ar[2];         
ar[0] = SafeArrayCreateVector(VT_BSTR,0,1);         
ar[1] = SafeArrayCreateVector(VT_BSTR,0,1);         
_bstr_t a(lpszSrcDoc);         
_bstr_t b(lpszDstPDF);         
LONG rgIndices = 0;         
SafeArrayPutElement(ar[0],&rgIndices,(BSTR)a);         
rgIndices = 0;         
SafeArrayPutElement(ar[1],&rgIndices,(BSTR)b);*/        
long ret = 1;         
do 
{             
ret = maker.CreatePDF(lpszSrcDoc,lpszDstPDF,vOpt,covFalse,vTrue,covFalse,vOpt);             
Sleep(100);         
} while(ret != 0);                   
//ret = maker.CreatePDFFromMultipleFiles(ar);         
//SafeArrayDestroy(ar[0]);         
//SafeArrayDestroy(ar[1]);         
pDispApp->Release();        
pUnk->Release();         
return ret;     
}     
return FALSE; 
}

#4


用loadlibrary 加载PDFMakerAPI.dll

#5


谢谢 shen_wei,我用LoadLibrary加载了,但没有效果啊?这个已经试过了。

#6


关注一下,我也有可能有这个需求

#7


你安装最新版的acrobat pdf,然后找到最新的这个DLL试试

#8


引用 5 楼 liuli7786 的回复:
谢谢 shen_wei,我用LoadLibrary加载了,但没有效果啊?这个已经试过了。


没有效果,有什么错误提示没?

#9


暂时没有什么好的解决办法,只能在C程序中调用C#生成的exe来对office文件来进行转换pdf。

#10


试试用COM的形式,把PDFMakerAPI.dll import进来,或者用工具生成tlb/tlh文件include