无论是PC端的资料整理过程中、浏览器的上网过程中,或是微信之类的操作中,经常会接触到PDF格式的文档。多数人只是阅读即过,也有相当多一部分人,希望将PDF中的文字内容为我所用,尤其是复制到Word中加以编辑。遇到加密保护的PDF文档,就无从下手了。这里要给大家介绍一个工具,PDF文档转换器,它能将加密的和非加密的PDF文档的内容全部取出,供你后续使用。你可从CSDN上免费下载这个转换器,普通的文员也很容易操作。
如果你是一名C++开发人员,可以继续往后看,下面给出C++开发思路。
PDF文本内容提取方法
因为PDF实在是太常用了,因此,有大量的PDF开发接口,供C++软件开发人员使用,比如, Xpdf ,此处要介绍的方法,是利用Foxit公司的foxit开发包,这个开发包同样可以从CSDN上下载。
下载之后,你将会得到3个核心文件:fpdftext.h,fpdfsdk.lib,fpdfsdk.dll。
PDF文本内容提取c++ builder核心代码
//打开pdf文件,并将转换的文本内容,放在Memo1之中。
void __fastcall TForm1::pdfConvert(String filename,TStringList *slKeyword,String rarPath)
{
HANDLEhFile = NULL;
DWORDdwFsize;
DWORDdwBytesRead = 0;
Memo1->Lines->Clear();
Memo1->Clear();
void* pDoc;
try
{
//打开pdf文件,密码置为空
pDoc=FPDF_LoadDocument(filename.c_str(),"");
if(NULL == pDoc)
{
FPDF_CloseDocument(pDoc);
return;
}
//得到文档页数
int count = FPDF_GetPageCount(pDoc);
// iFirst, iLast表示需提取文本的页码范围
int iFirst,iLast;
int idx=Edit1->Text.Pos("-");
if(idx)
{
iFirst=StrToInt(Edit1->Text.SubString(1,idx-1));
iLast=StrToInt(Edit1->Text.SubString(idx+1,Edit1->Text.Length()-idx));
}
if(iLast < iFirst)
{
MessageBox(Handle,"后面的页码不能小于前面的页码!","提示",MB_OK + MB_ICONEXCLAMATION+MB_TOPMOST);
return;
}
if(iFirst <1)
{
MessageBox(Handle,"前面的页码最小为1!","提示",MB_OK + MB_ICONEXCLAMATION+MB_TOPMOST);
return;
}
if(iLast > count)
{
MessageBox(Handle,"后面的页码不能大于PDF文档页数!","提示",MB_OK + MB_ICONEXCLAMATION+MB_TOPMOST);
return;
}
for(int iPages=iFirst-1;iPages< iLast;iPages++)
{
wchar_t *wsPass=new wchar_t[102400];
memset(wsPass,0x0,102400);
int iPageSize=FPDFText_PageToText(pDoc,iPages,wsPass,102400,0); //返回实际长
int iError=FPDF_GetLastError(); //
if(iPageSize>0)
{
Memo1->Lines->Add(wsPass);
delete []wsPass;
}
} //for(int iPages=0;
FPDF_CloseDocument(pDoc);
} //try
catch(EOutOfResources *e)
{
///
}
catch(...)
{
if(GetLastError()!=0)
}
}
怎么样,绝非你想象的那么复杂吧。如果你有兴趣,就自己试一试吧。
如果你有什么不明白之处,就关注我的头条号,或私信。
智有不明,于18.3.21