Hay muchos controles para generar PDF, pero no demasiados para analizar. PDF Toolkit puede hacerlo, pero el primer PDF complejo probado informa un error y los caracteres chinos están confusos. La versión o el método de uso pueden ser incorrectos.
Recordé que la biblioteca pdfBox con el nombre de Apache que se llamaba usando java era muy útil, así que descargué pdfBox y usé Delphi para llamar a pdfBox para analizar el texto pdf.
Requisitos ambientales: entorno de ejecución de Java
Paquete de aplicación pdfBox: pdfbox-app-2.0.6.jar
La línea de comando de DOS se usa aquí para analizar y luego se llama a los resultados analizados.
La primera es ejecutar el comando de DOS:
procedimiento CheckResult(b: Boolean);comience si no es b, luego genere Exception.Create(SysErrorMessage(GetLastError));end;función RunDOS(const CommandLine: string): string;var HRead, HWrite: THandle StartInfo: TStartupInfo: TProcessInformation; b: booleano; sa: TSecurityAttributes; enS: THandleStream; sRet: TStrings;begin Result := ''; FillChar(sa, sizeof(sa), 0);// Establecer para permitir la herencia; de lo contrario, el resultado de salida no se puede obtener en NT y 2000 sa.nLength := sizeof(sa) ; sa .bInheritHandle := Verdadero; sa.lpSecurityDescriptor := nil b := CreatePipe(HRead, HWrite, @sa, 0); CheckResult(b); FillChar(StartInfo, SizeOf(StartInfo), 0); StartInfo.cb := SizeOf(StartInfo); StartInfo.wShowWindow := SW_HIDE;// Utilice el identificador especificado como identificador de archivo de entrada y salida estándar. el método de visualización especificado StartInfo.dwFlags := STARTF_USESTDHANDLES o STARTF_USESHOWWINDOW; StartInfo.hStdError := HWrite; StartInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE); //HRead; StartInfo.hStdOutput := HWrite b := CreateProcess(nil, //lpApplicationName: PChar(CommandLine), //lpCommandLine: PChar nil, //lpProcessAtributos: PSecurityAttributes nulo, //lpThreadAttributes: PSecurityAttributes True, //bInheritHandles: BOOL CREATE_NEW_CONSOLE, nulo, nulo, StartInfo, ProceInfo; WaitForSingleObject(ProceInfo.hProcess, INFINITE);= THandleStream.Create(HRead); si inS.Size> 0 luego comience sRet:= TStringList.Create; sRet.LoadFromStream(inS); Resultado:= sRet.Text; final;
Luego llame a la pantalla:
función TfrmPDFTool.GetPDFText(sFile: string): string;var cmd:string; pdfFilePath,pdfFileName,txtFileName:String;begin //java -jar pdfbox-app-2.0.6.jar ExtractText -codificación utf-8 e:// temp//test.pdf e://temp//testiii.txt pdfFilePath:=ExtractFilePath(sFile); pdfFileName:=ExtractFileName(sFile); txtFileName:=FAppPath+'Temp/'+pdfFileName+'.txt'; 6.jar ExtractText '+' -codificación utf-8 '+sFile +' '+txtFileName; AddLog(cmd); Resultado:=RunDOS(cmd); AddLog(Resultado); memTxtFile.Lines.LoadFromFile(txtFileName,TUTF8Encoding.Create); );fin;
¡Bien, ya terminaste!
El ejemplo anterior de extracción de texto PDF por Delphi es todo el contenido compartido por el editor. Espero que pueda brindarle una referencia y espero que apoye a Wulin.com.