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
没有效果,有什么错误提示没?
#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
没有效果,有什么错误提示没?
#9
暂时没有什么好的解决办法,只能在C程序中调用C#生成的exe来对office文件来进行转换pdf。
#10
试试用COM的形式,把PDFMakerAPI.dll import进来,或者用工具生成tlb/tlh文件include