新闻建站cms系统、政府cms系统定制开发

广州网站建设公司-阅速公司

asp.net新闻发布系统、报纸数字报系统方案
/
http://www.ysneo.com/
广州网站建设公司
您当前位置:首页>网站技术

网站技术

利用acrobat sdk提取pdf文档内容

发布时间:2019/5/18 13:45:28  作者:Admin  阅读:1454  

广告:阿里云采购优惠专区

0x00 背景

HackingTeam泄漏事件影响颇大,415.77G的内容大多是邮件内容,分析起来比较麻烦,因而被大多数人忽略。网上有很多邮件分析的文章HT邮件分析,主要是针对邮件关联进行分析,若对邮件内容进行分析则需提取邮件附件中的内容,再针对内容做进一步分析。本文背景其实与上文无关,只是借此提升逼格,下面将介绍如何利用acrobat SDK提取pdf文档内容。

0x01 acrobat导入

只要安装了Adobe Acrobat,就能在其安装目录下找到acrobat.tlb,其中包含了adobe公司提供的接口,可对pdf进行各种操作参考文档,使用类向导将其导入。

提取文本内容需导入CAcroApp、CAcroAVDoc、CAcroAVPageView、CAcroPDPage、CAcroPDTextSelect、CAcroHiliteList。

0x02 提取文档内容

首先需要”打开”pdf,核心代码如下:

CAcroApp *pAcrpApp = new CAcroApp;

COleException e;

pAcrpApp->CreateDispatch("AcroExch.App",&e);

CAcroAVDoc *pAvdoc = new CAcroAVDoc;

pAvdoc->CreateDispatch("AcroExch.AVDoc",&e);

//打开pdf,其中PDFName为全路径

if (!pAvdoc->Open(PDFName,NULL))

{

printf("open pdf failed");

...

return 0;

}

打开文档后,通过pAvdoc可选择页数(默认为第一页),创建高亮板(CAcroHiliteList),将选择页数的内容加入高亮板,然后就可以从中提取出该页的内容,核心代码如下:

CAcroAVPageView pageView;

CAcroPDPage page;

CAcroPDTextSelect* textSelect = new CAcroPDTextSelect;

CAcroHiliteList* hilite = new CAcroHiliteList;

long selectionSize;

pageView.AttachDispatch(pAvdoc->GetAVPageView(),TRUE);

 

hilite->CreateDispatch("AcroExch.HiliteList");

if (hilite)

{

//设置为第一页

pageView.GoTo(0);

/*

这里是设置高亮板的大小

由于没有找到如何在设置高亮板前获取该页内容长度的方法,所以采用设置成极大的长度

如有朋友知道方法,欢迎提出相互学习

*/

hilite->Add(0,4000);

page.AttachDispatch(pageView.GetPage(), TRUE);

textSelect->AttachDispatch(page.CreateWordHilite(hilite->m_lpDispatch));

pAvdoc->SetTextSelection(textSelect->m_lpDispatch);

selectionSize = textSelect->GetNumText();

if (selectionSize && strText.GetLength() < 4000)

{

for(int i = 0;i < selectionSize;i ++)

{

strText += textSelect->GetText(i);

}

}

}

要完整提取出文档中的全部内容,可通过CAcroPDDoc获取pdf总页数,然后利用pageView.GoTo循环每一页,下面给出的完整工程将不包含此部分代码。

广告:阿里云新人采购专场

相关文章
acrobat
sdk
cms新闻系统购买咨询
扫描关注 广州阅速软件科技有限公司
扫描关注 广州阅速科技