利用acrobat sdk提取pdf文档内容
广告:
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循环每一页,下面给出的完整工程将不包含此部分代码。
广告: