Существует множество элементов управления для создания PDF-файлов, но не слишком много для анализа. PDF Toolkit может это сделать, но первый протестированный сложный PDF-файл сообщает об ошибке, а китайские иероглифы могут быть искажены. Версия или метод использования могут быть неправильными.
Я вспомнил, что библиотека pdfBox под именем Apache, которая вызывалась с помощью Java, была очень полезной, поэтому я скачал pdfBox и использовал Delphi для вызова pdfBox для анализа текста pdf.
Экологические требования: рабочая среда Java
Пакет приложения pdfBox: pdfbox-app-2.0.6.jar
Здесь для анализа используется командная строка DOS, а затем вызываются результаты анализа.
Первый — выполнить команду DOS:
процедура CheckResult(b: Boolean);begin, если не b, то вызвать Exception.Create(SysErrorMessage(GetLastError));end;function RunDOS(const CommandLine: string): string;var HRead, HWrite: THandle; StartInfo: TStartupInfo; TProcessInformation; б: логическое значение; са: TSecurityAttributes; inS: THandleStream; sRet: TStrings;begin Result := ''; FillChar(sa, sizeof(sa), 0);//Устанавливаем разрешение наследования, иначе выходной результат не может быть получен под NT и 2000 sa.nLength := sizeof(sa) ; sa .bInheritHandle := True; sa.lpSecurityDescriptor := ноль; b := CreatePipe(HRead, HWrite, @sa, 0); CheckResult(b); FillChar(StartInfo, SizeOf(StartInfo), 0); StartInfo.cb := SizeOf(StartInfo); StartInfo.wShowWindow := SW_HIDE;//Использовать указанный дескриптор в качестве стандартного дескриптора файла ввода и вывода, используйте указанный метод отображения 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: PChar ноль, //lpProcessAttributes: PSecurityAttributes nil, //lpThreadAttributes: PSecurityAttributes True, //bInheritHandles: BOOL CREATE_NEW_CONSOLE, nil, nil, StartInfo, ProceInfo); если inS.Size > 0, затем начать sRet:= TStringList.Create; sRet.LoadFromStream(inS); Result:= sRet.Text; sRet.Free; CloseHandle(HRead); CloseHandle(HWrite);end;
Затем вызовите дисплей:
функция 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; AddLog(cmd); Результат:=RunDOS(cmd); memTxtFile.Lines.LoadFromFile(txtFileName,TUTF8Encoding.Create); FPDFText:=memTxtFile.Text; );конец;
Хорошо, все готово!
Приведенный выше пример извлечения текста PDF с помощью Delphi — это весь контент, предоставленный редактором. Я надеюсь, что он может дать вам ссылку, и я надеюсь, что вы поддержите Wulin.com.