新闻资讯 | 控件产品 | 技术文章 | 购物车 | 合作伙伴 | 问题解答 | 电子简报 | PDF论坛 | 资源下载
您现在的位置:技术文章>PDF开发篇 首页|PDF应用篇|PDF开发篇|解决方案

在C++中借助Acrobat将PDF转为TIFF

发布日期:2013-5-21 作者:super_admi 出处:blog.csdn.net

此处是借助Acrobat来进行转换,首先要安装Acrobat,装完后,系统中会有Acrobat 的COM库,同时,安装目录下有一个Acrobat.tlb和Acrobat.dll文件,这都是我们所需要的。

1.建立C++工程,将tlb添加到工程中(为了方便使用,其实不添加也可以)。在代码中#import "Acrobat.tlb"。

2.定义两个类成员变量:

Acrobat::CAcroAppPtr    acrapp;

Acrobat::CAcroPDDocPtr  acrdoc;

3.在类构造函数中,对COM进行初始化,同时初始化以上两个变量,析构函数反之(这里COM初始化和卸载因实际需要而谨慎处理):

CSigner()  
    : strError(L"") 
    , acrapp(NULL) 
    , acrdoc(NULL) 

    ::CoInitialize(NULL); 

~CSigner() 

    ::CoUninitialize(); 

4.在类的初始化函数中,创建COM实例:

if(NULL == acrapp) 

    acrapp.CreateInstance(Acrobat::CLSID_AcroApp); 
    acrapp->Hide(&ret); 

if(NULL == acrdoc) 

    acrdoc.CreateInstance(Acrobat::CLSID_AcroPDDoc); 
}

5.关键部分来了。调用Acrobat COM组件的SaveAs方法,做“另存为”操作,即可将PDF转为其它格式(具体格式字符串网上可查):

HRESULT hr = S_OK; 
try 

    VARIANT_BOOL ret = VARIANT_TRUE; 
    hr = acrdoc->Open(strPdfPath, &ret); 
    if(FAILED(hr))throw (hr); 
    IDispatch FAR* jso = NULL; 
    hr = acrdoc->GetJSObject(&jso); 
    if(FAILED(hr))throw (hr); 
 
    DISPID dispId; 
    OLECHAR FAR* szMember = L"SaveAs"; 
    hr = jso->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_SYSTEM_DEFAULT, &dispId); 
    if(FAILED(hr))throw (hr); 
    DISPPARAMS dispParams; 
    memset(&dispParams, 0, sizeof(dispParams)); 
    dispParams.cArgs = 2; 
    CComVariant* pVars = new CComVariant[2]; 
    pVars[1] = strTifPath; 
    pVars[0] = L"com.adobe.acrobat.tiff"; 
    pVars[1].ChangeType(VT_BSTR); 
    pVars[0].ChangeType(VT_BSTR); 
    dispParams.rgvarg = pVars; 
    dispParams.cNamedArgs = 0; 
    EXCEPINFO excepInfo; 
    memset(&excepInfo, 0, sizeof(excepInfo)); 
    CComVariant vaResult; 
    UINT nArgErr = (UINT)-1; 
    hr = jso->Invoke(dispId, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &dispParams, &vaResult, &excepInfo, &nArgErr); 
    delete[] pVars; 
    *state = hr; 
    return hr; 

catch(_com_error ce) 

    strError = ce.ErrorMessage(); 
    *state = hr; 
    return S_FALSE; 

catch(...) 

    *state = hr; 
    return S_OK; 

第5步骤同时也展示了C++中调用JSObject的方法,即使用最原始的COM调用手段,MSDN上也有说明,但很不详细。

 

发布人:管理员 【报告错误】·【推荐好友】·【打印文章】
相关评论 本文现有 0 条评论 评分人数: 0 平均分: 0
相关评论
用户名: 密  码:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
注意:请不要在评论中含与内容无关的广告链接,违者封ID
文章搜索
推荐文章
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
循序渐进学习iTextShar
热门点击
一个简单的PDF文件结构的分析(22805)
PHP的FDF文档支持(16288)
用C#制作PDF文件全攻略(13720)
Word转换PDF格式的C#或(12241)
ITextRenderer学习(11899)
pdfMaker文章:PDF加(11717)
PDF文件加密仿真(11130)
怎样用iReport制作Web(10519)
iText PDF概述(1)(10113)
从pdf文档中提取出文本(10094)
热门评论
从pdf文档中提取出文本(8)
PDFlib开发:创建超文本元(2)
客户端自动打印PDF(Prin(2)
浅谈PDFlib中文输出(一)(2)
xml的转换之pdf 2 ((1)
xml的转换之pdf 1 (x(1)
PDF知识讲座(1)(1)
PDFBox使用简介(1)
使用正则表达式计算PDF文档的(1)
word转pdf(1)