欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Delphi提取PDF文本實(shí)例

 更新時(shí)間:2017年06月10日 13:12:38   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇Delphi提取PDF文本實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

生成PDF的控件很多,但解析的不是太多,pdf Toolkit可以,但測(cè)試的第一個(gè)復(fù)雜的pdf就報(bào)告錯(cuò)誤,并且漢字亂碼,可能使用的版本或使用方法不對(duì)。

想起之前使用java調(diào)用的Apache名下的pdfBox庫(kù)很好用,于是就用下載了pdfBox,使用Delphi來(lái)調(diào)用pdfBox解析pdf文本。

環(huán)境要求:java運(yùn)行環(huán)境

pdfBox應(yīng)用包:pdfbox-app-2.0.6.jar

這里使用了DOS命令行來(lái)解析,然后調(diào)用解析結(jié)果。

首先是執(zhí)行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);
//設(shè)置允許繼承,否則在NT和2000下無(wú)法取得輸出結(jié)果
 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;
//使用指定的句柄作為標(biāo)準(zhǔn)輸入輸出的文件句柄,使用指定的顯示方式
 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;

然后調(diào)用顯示:

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,大功告成!

以上這篇Delphi提取PDF文本實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論