PDF を生成するためのコントロールはたくさんありますが、解析についてはそれほど多くはありません。PDF Toolkit ではそれができますが、最初にテストした複雑な PDF ではエラーが報告され、バージョンまたは使用方法が間違っている可能性があります。
Javaを使って呼び出すApache名のpdfBoxライブラリがとても便利だったことを思い出し、pdfBoxをダウンロードし、Delphiを使ってpdfBoxを呼び出してpdfテキストを解析してみました。
環境要件: Java 実行環境
pdfBox アプリケーション パッケージ: pdfbox-app-2.0.6.jar
ここでは DOS コマンド ラインを使用して解析し、解析結果が呼び出されます。
1 つ目は、DOS コマンドを実行することです。
プロシージャ CheckResult(b: Boolean); b でない場合は開始し、Exception.Create(SysErrorMessage(GetLastError));end;function RunDOS(const CommandLine: string): string;var HRead, HWrite: THandle: TStartupInfo; TProcessInformation; b: ブール値; sa: 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.dwFlags := STARTF_USESTDHANDLES または STARTF_USESHOWWINDOW; StartInfo.hStdError := HWrite; StartInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE); //HRead; StartInfo.hStdOutput := HWrite b := CreateProcess(nil, //lpApplicationName: PChar PChar(CommandLine), //lpCommandLine: nil, //lpProcessAttributes: PSecurityAttributes nil, //lpThreadAttributes: PSecurityAttributes True, //bInheritHandles: BOOL CREATE_NEW_CONSOLE, nil, nil, StartInfo, CheckResult(b); inS := THandleStream.Create(HRead);もしinS.Size > 0 の場合、sRet := TStringList.Create; 結果 := sRet.Free(HWrite);
次に、ディスプレイを呼び出します。
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 ' +' - エンコーディング utf-8 '+sFile +' +txtFileName; 結果:=RunDOS(cmd); memTxtFile.Lines.LoadFromFile(txtFileName,TUTF8Encoding.Create); );終わり;
OK、完了です!
上記の Delphi による PDF テキストの抽出例は、エディターが共有するすべての内容です。参考にしていただければ幸いです。また、Wulin.com をサポートしていただければ幸いです。