Delphi提取PDF文本实例
生成PDF的控件很多,但解析的不是太多,pdfToolkit可以,但测试的第一个复杂的pdf就报告错误,并且汉字乱码,可能使用的版本或使用方法不对。
想起之前使用java调用的Apache名下的pdfBox库很好用,于是就用下载了pdfBox,使用Delphi来调用pdfBox解析pdf文本。
环境要求:java运行环境
pdfBox应用包:pdfbox-app-2.0.6.jar
这里使用了DOS命令行来解析,然后调用解析结果。
首先是执行DOS命令:
procedureCheckResult(b:Boolean); begin ifnotbthen raiseException.Create(SysErrorMessage(GetLastError)); end; functionRunDOS(constCommandLine:string):string; var HRead,HWrite:THandle; StartInfo:TStartupInfo; ProceInfo:TProcessInformation; b:Boolean; sa:TSecurityAttributes; inS:THandleStream; sRet:TStrings; begin Result:=''; FillChar(sa,sizeof(sa),0); //设置允许继承,否则在NT和2000下无法取得输出结果 sa.nLength:=sizeof(sa); sa.bInheritHandle:=True; sa.lpSecurityDescriptor:=nil; b:=CreatePipe(HRead,HWrite,@sa,0); CheckResult(b); FillChar(StartInfo,SizeOf(StartInfo),0); StartInfo.cb:=SizeOf(StartInfo); StartInfo.wShowWindow:=SW_HIDE; //使用指定的句柄作为标准输入输出的文件句柄,使用指定的显示方式 StartInfo.dwFlags:=STARTF_USESTDHANDLESorSTARTF_USESHOWWINDOW; StartInfo.hStdError:=HWrite; StartInfo.hStdInput:=GetStdHandle(STD_INPUT_HANDLE);//HRead; StartInfo.hStdOutput:=HWrite; b:=CreateProcess(nil,//lpApplicationName:PChar PChar(CommandLine),//lpCommandLine:PChar nil,//lpProcessAttributes:PSecurityAttributes nil,//lpThreadAttributes:PSecurityAttributes True,//bInheritHandles:BOOL CREATE_NEW_CONSOLE, nil, nil, StartInfo, ProceInfo); CheckResult(b); WaitForSingleObject(ProceInfo.hProcess,INFINITE); inS:=THandleStream.Create(HRead); ifinS.Size>0then begin sRet:=TStringList.Create; sRet.LoadFromStream(inS); Result:=sRet.Text; sRet.Free; end; inS.Free; CloseHandle(HRead); CloseHandle(HWrite); end;
然后调用显示:
functionTfrmPDFTool.GetPDFText(sFile:string):string; var cmd:string; pdfFilePath,pdfFileName,txtFileName:String; begin //java-jarpdfbox-app-2.0.6.jarExtractText-encodingutf-8e:\\temp\\test.pdfe:\\temp\\testiii.txt pdfFilePath:=ExtractFilePath(sFile); pdfFileName:=ExtractFileName(sFile); txtFileName:=FAppPath+'Temp\'+pdfFileName+'.txt'; cmd:='java-jar'+FAppPath+'PDFBox\pdfbox-app-2.0.6.jarExtractText' +'-encodingutf-8'+sFile +''+txtFileName; AddLog(cmd); Result:=RunDOS(cmd); AddLog(Result); memTxtFile.Lines.LoadFromFile(txtFileName,TUTF8Encoding.Create); FPDFText:=memTxtFile.Text; AddLog(FPDFText); end;
OK,大功告成!
以上这篇Delphi提取PDF文本实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。