您现在的位置: 主页 > 上位机技术 > dephi提取pdf文字的方法
本文所属标签:
#dephi处理pdf#   
为本文创立个标签吧:

dephi提取pdf文字的方法

来源:网络来源 网络用户发布,如有版权联系网管删除 2020-03-12 

生成PDF的控件很多,但解析的不是太多,pdf Toolkit可以,但测试的第一个复杂的pdf就报告错误,并且汉字乱码,可能使用的版本或使用方法不对。

想起之前使用java调用的Apache名下的pdfBox库很好用,于是就用下载了pdfBox,使用Delphi来调用pdfBox解析pdf文本。

环境要求:java运行环境

pdfBox应用包:pdfbox-app-2.0.6.jar

这里使用了DOS命令行来解析,然后调用解析结果。

首先是执行DOS命令:

复制代码
 procedure CheckResult(b: Boolean); begin if not b then raise Exception.Create(SysErrorMessage(GetLastError)); end; function RunDOS(const CommandLine: 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_USESTDHANDLES or STARTF_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); if inS.Size > 0 then begin sRet := TStringList.Create; sRet.LoadFromStream(inS); Result := sRet.Text; sRet.Free; end; inS.Free; CloseHandle(HRead); CloseHandle(HWrite); end;
复制代码

然后调用显示:

复制代码
 function TfrmPDFTool.GetPDFText(sFile: string): string; var cmd:string; pdfFilePath,pdfFileName,txtFileName:String; begin //java -jar pdfbox-app-2.0.6.jar ExtractText -encoding utf-8 e:\\temp\\test.pdf e:\\temp\\testiii.txt pdfFilePath:=ExtractFilePath(sFile); pdfFileName:=ExtractFileName(sFile); txtFileName:=FAppPath+'Temp\'+pdfFileName+'.txt'; cmd:='java -jar '+FAppPath+'PDFBox\pdfbox-app-2.0.6.jar ExtractText ' +' -encoding utf-8 '+sFile +' '+txtFileName; AddLog(cmd); Result:=RunDOS(cmd); AddLog(Result); memTxtFile.Lines.LoadFromFile(txtFileName,TUTF8Encoding.Create); FPDFText:=memTxtFile.Text; AddLog(FPDFText); end;
复制代码

 

OK,大功告成!



              查看评论 回复



嵌入式交流网主页 > 上位机技术 > dephi提取pdf文字的方法
 

"dephi提取pdf文字的方法"的相关文章

网站地图

围观()