Il existe de nombreux contrôles pour générer des PDF, mais pas beaucoup pour l'analyse. PDF Toolkit peut le faire, mais le premier PDF complexe testé signale une erreur et les caractères chinois sont tronqués. La version ou la méthode d'utilisation peut être erronée.
Je me suis souvenu que la bibliothèque pdfBox sous le nom d'Apache qui était appelée en utilisant Java était très utile, j'ai donc téléchargé pdfBox et utilisé Delphi pour appeler pdfBox afin d'analyser le texte pdf.
Exigences environnementales : environnement d'exécution Java
Package d'application pdfBox : pdfbox-app-2.0.6.jar
La ligne de commande DOS est utilisée ici pour analyser, puis les résultats analysés sont appelés.
La première consiste à exécuter la commande DOS :
procédure CheckResult(b: Boolean);begin sinon b puis déclencher Exception.Create(SysErrorMessage(GetLastError));end;function RunDOS(const CommandLine: string): string;var HRead, HWrite: THandle; TProcessInformation ; b : booléen ; sa : TSecurityAttributes ; sRet: TStrings;begin Result := ''; FillChar(sa, sizeof(sa), 0);//Défini pour autoriser l'héritage, sinon le résultat de sortie ne peut pas être obtenu sous NT et 2000 sa.nLength := sizeof(sa) ; sa .bInheritHandle := True; sa.lpSecurityDescriptor := nul; b := CreatePipe(HLit, HWrite, @sa, 0); CheckResult(b); FillChar(StartInfo, SizeOf(StartInfo), 0); StartInfo.cb := SizeOf(StartInfo); StartInfo.wShowWindow := SW_HIDE;//Utiliser le handle spécifié comme handle de fichier d'entrée et de sortie standard, utilisez la méthode d'affichage spécifiée StartInfo.dwFlags := STARTF_USESTDHANDLES ou STARTF_USESHOWWINDOW ; StartInfo.hStdError := HWrite; StartInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE); //HLit; StartInfo.hStdOutput := HWrite; b := CreateProcess(nil, //lpApplicationName: PChar PChar(CommandLine), //lpCommandLine: PChar nul, //lpProcessAttributes : PSecurityAttributes nul, //lpThreadAttributes : PSecurityAttributes True, //bInheritHandles : BOOL CREATE_NEW_CONSOLE, nul, nul, StartInfo, ProceInfo(b); WaitForSingleObject(ProceInfo.hProcess, INFINITE); si inS.Size > 0 puis commencez sRet := TStringList.Create; sRet.LoadFromStream(inS); Résultat := sRet.Free; end;
Puis appelez l'affichage :
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(sFileName); txtFileName:=FAppPath+'Temp/'+pdfFileName+'.txt'; cmd:='java -jar '+FAppPath+'PDFBox/pdfbox-app-2.0. 6.jar ExtractText ' +' -encodage utf-8 '+sFile +' '+txtFileName; AddLog(cmd); Résultat :=RunDOS(cmd); memTxtFile.Lines.LoadFromFile(txtFileName,TUTF8Encoding.Create); );fin;
OK, vous avez terminé !
L'exemple ci-dessus d'extraction de texte PDF avec Delphi représente tout le contenu partagé par l'éditeur. J'espère qu'il pourra vous donner une référence et j'espère que vous soutiendrez Wulin.com.