هناك العديد من عناصر التحكم لإنشاء ملف PDF، ولكن ليس هناك الكثير من أدوات التحليل التي يمكنها القيام بذلك، ولكن أول ملف PDF معقد تم اختباره أبلغ عن خطأ وقد تكون الأحرف الصينية مشوهة.
تذكرت أن مكتبة pdfBox تحت اسم Apache والتي تم استدعاؤها باستخدام Java كانت مفيدة جدًا، لذلك قمت بتنزيل pdfBox واستخدمت Delphi لاستدعاء pdfBox لتحليل نص pdf.
المتطلبات البيئية: بيئة تشغيل جافا
حزمة تطبيق pdfBox: pdfbox-app-2.0.6.jar
يتم استخدام سطر أوامر DOS هنا للتحليل، ثم يتم استدعاء النتائج التي تم تحليلها.
الأول هو تنفيذ أمر DOS:
الإجراء CheckResult(b: Boolean);ابدأ إذا لم يكن b ثم ارفع Exception.Create(SysErrorMessage(GetLastError));end;function RunDOS(const CommandLine: string): string;var HRead, HWrite: THandle; TProcessInformation; 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.wShowWindow := SW_HIDE;// استخدم المقبض المحدد كمقبض ملف الإدخال والإخراج القياسي. طريقة العرض المحددة StartInfo.dwFlags := STARTF_USESTDHANDLES أو STARTF_USESHOWWINDOW؛ StartInfo.hStdError := HWrite; StartInfo.hStdInput := GetStdHandle(STD_INPUT_HANDLE); //HRead; لا شيء، //lpProcessAttributes: PSecurityAttributes nil, //lpThreadAttributes: PSecurityAttributes True, //bInheritHandles: BOOL CREATE_NEW_CONSOLE, nil, nil, StartInfo, ProceInfo(b); WaitForSingleObject(ProceInfo.hProcess, INFINITE); لو inS.Size > 0 ثم ابدأ sRet := TStringList.Create; sRet.LoadFromStream(inS);
ثم اتصل بالعرض:
وظيفة TfrmPDFTool.GetPDFText(sFile: string): string;var cmd:string; pdfFilePath,pdfFileName,txtFileName:String;begin //java -jar pdfbox-app-2.0.6.jar ExtractText - ترميز utf-8 e:// درجة الحرارة //test.pdf e://temp//testiii.txt pdfFilePath:=ExtractFilePath(sFile); pdfFileName:=ExtractFileName(sFile);=FAppPath+'Temp/'+pdfFileName+'.txt'; 6.jar ExtractText '+' - ترميز utf-8 '+sFile +' '+txtFileName; AddLog(cmd); Result:=FPDOS(cmd); memTxtFile.Lines.LoadFile(txtFileName,TUTF8Encoding.Create); )؛نهاية؛
حسنًا، لقد انتهيت!
المثال أعلاه لاستخراج نص PDF باستخدام دلفي هو كل المحتوى الذي شاركه المحرر وآمل أن يوفر لك مرجعًا، وآمل أن تدعم Wulin.com.