產生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; InfoHRead, HStart: TStartupid; TProcessInformation; b: 布林; 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); InfoStart.wShowWindow := SW_HIDEInfo); InfoStart.wShowWindow := SW_HIDEInfos; ;//使用指定的句柄作為標準輸入輸出的文件句柄,使用指定的顯示方式StartInfo.dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW; StartInfo.hStdError := HWrite; StartInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE); //HRead; StartInfo.hProcesss; 。 .hProcess, INFINITE); inS := THandleStream.Create(HRead); if inS.Size > 0 then begin sRet := TStringList.Create; sRet.LoadFromStream(inS); Result := sRet.Text; sRet.LoadFromStream(inS); Result := sRet.Text; sRet.Free; 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://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文字實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。