Searchable OCR Text Layers
HotPDF kan rendere valgte indlæste sider til en applikationsleveret OCR-motor og atomært tilføje søgbar usynlig Unicode-tekst justeret til hvert genkendt ord
SearchableOCR-konsoldemot giver en køreklar arbejdsgang: generér et tresiders eksempel med kun billeder via --create-sample, vælg indbygget OCR, RapidOCR- eller Tesseract DLL/CLI-genkendelse, udvælg sider, konfigurér confidence- og ressourcegrænser, og gem en søgbar kopi med konverteringsstatistik
Motorintegration
Implement IHPDFOCREngine med enhver synkron OCR-provider, applikationen har adgang til
Motoren modtager en lånt TBitmap , ønsket DPI, normaliseret siderotation, media box-koordinater, resterende ord- og UTF-16-budgetter og det effektive annulleringstoken gennem THPDFOCRRequest
Ord-bokse og valgfrie baselinjer bruger top-venstre bitmap-pixelkoordinater, og motoren må ikke fastholde eller frigive den lånte bitmap, efter Recognize returnerer
Valgfrie lokale motorer
Version 2.754.0 tilføjer eksplicitte Tesseract- og RapidOCR-fabrikker, der returnerer IHPDFOCREngine på Windows; overloaden uden motor vælger stadig den eksisterende indbyggede motor
Installér og klargør den valgte motor lokalt, før dens adapter oprettes, og giv derefter den adapter videre til motor-overloaden af ApplyLoadedOCRTextLayer; eksekverbare filer, Python-pakker og OCR-modeller er valgfrie eksterne afhængigheder og følger ikke med HotPDF
Tesseract
Den valgfrie native Tesseract-DLL-adapter tilføjer konfigurerbar page segmentation og engine modes, flersproget genkendelse og native ord-baselinjer gennem HPDFCreateTesseractDLLOCREngine og THPDFTesseractOptions
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateTesseractOCREngine(const ExecutablePath,
TessDataDirectory, Language: string;
const Options: THPDFTesseractOptions): IHPDFOCREngine; overload;
Deklarationen findes i HPDFTesseractRecognition; angiv en Tesseract-eksekverbar, der kan levere TSV-output, og en datamappe med den ønskede sprogmodel, f.eks. chi_sim.traineddata for chi_sim
Options-overloaden accepterer THPDFTesseractOptions.Default med eksplicit page segmentation, genkendelses-engine-tilstand, timeout og input-pixelgrænse; vælg tpsSingleLine, tpsSingleWord eller tpsSparseText, så det passer til inputlayoutet, som vist i Tesseract OCR Adapters
Dette eksempel forudsætter, at den eksekverbare fil og dataene allerede er installeret på de viste stier, og at PDF er en indlæst THotPDF instans
uses SysUtils, HPDFDoc, HPDFTesseractRecognition;
procedure AddTesseractText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Options: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Engine := HPDFCreateTesseractOCREngine(
'C:\OCR\Tesseract\tesseract.exe',
'C:\OCR\Tesseract\tessdata', 'chi_sim', 60000);
Options := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Options, Info) then
raise Exception.Create('OCR text layer was not added');
end;
RapidOCR
Native RapidOCR-DLL-adapteren genkender hukommelsessnapshots med vedvarende in-process CPU ONNX-modeller gennem HPDFCreateRapidOCRDLLOCREngine med valgfri vinkelklassifikation og kooperativ annullering i Delphi-, C++Builder- og Windows FPC/Lazarus-builds
RapidOCR lokal model-adapteren leverer også en THPDFRapidOCROptions-overload med eksplicitte ONNX-modelstier, valgfri vinkelklassifikation, lokale tegnordbøger og fonts, CPU-trådgrænser og et input-pixelbudget i Delphi-, C++Builder- og FPC/Lazarus-builds
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine;
Deklarationen findes i HPDFRapidOCRRecognition; klargør Python med rapidocr og onnxruntime , den medfølgende tools/OCR/rapidocr_tsv.py -bridge og disse tre lokale modeller
ch_PP-OCRv4_det_mobile.onnxch_PP-OCRv4_rec_mobile.onnxch_ppocr_mobile_v2.0_cls_mobile.onnx
Bridgen kræver også %WINDIR%\Fonts\arial.ttf til RapidOCRs resultatsbeholder, deaktiverer automatiske downloads og bruger én ONNX-tråd pr. konfigureret eksekveringspulje; manglende modeller, pakker eller den lokale font får genkendelsen til at fejle
Den nuværende bridge bruger den forenklede kinesiske modelkonfiguration og bevarer genkendt tegnsætning uden fuldbredde- eller halvbredde-substitution
uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;
procedure AddRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Options: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Engine := HPDFCreateRapidOCREngine(
'C:\OCR\Python\python.exe',
'C:\HotPDF\tools\OCR\rapidocr_tsv.py',
'C:\OCR\RapidOCR\models', 60000);
Options := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Options, Info) then
raise Exception.Create('OCR text layer was not added');
end;
Begge fabrikker validerer eksisterende eksekverbare filer og datastier og accepterer en timeout fra 1 til 3.600.000 millisekunder med 60.000 som standard; ugyldig konfiguration udløser EArgumentException
Den delte adapter starter en skjult lokal proces med anførte stier og begrænsede nedarvede handles, poller annullering, timeout og outputstørrelser hvert 25. millisekund og terminerer processen ved fejl, før midlertidige filer ryddes op
TSV-output er begrænset til 64 MiB og diagnostikfil-output til 1 MiB, med returneret diagnostik afkortet til 4.096 tegn; genkendte ord skal også passe i anmodningens ord- og UTF-16-budgetter og gyldige bitmap-grænser
TSV-genkendelsesoutput skal være gyldig UTF-8 og må ikke indeholde NUL-bytes eller C0/C1-kontroltegn inde i genkendte ord; misdannet output fejler hele genkendelsesforespørgslen, selv når gyldige ord går forud for fejlen
Det er output- og anmodningsgrænser, ikke en hård grænse for den eksterne motors hukommelsesbrug; annullering og motorfejl returneres gennem tekstlags-status uden at publicere delvise sider
Genkendelsesdokumentation og grænser
Det lokale RapidOCR 3.8.4-baseline bestod alle 15 gentagelser på tværs af fem faste kinesiske scanningsregioner: to klare regioner ved 300 DPI og tre lavopløsningsregioner under pres ved 150 DPI, evalueret mod de aktuelle referencetranskripter med tegnfejlrate på højst 5% og sletterate på højst 2%
Alle gentagelser bestod læseorden-kontrol, i alt 5.190 ord- eller tegnkoordinatkontrol og synlig-pixel-lighed ved 72 DPI; de to klare regioner havde nul tegnfejl mod de referencer
To AI-visuelle gennemgange er enige om den kinesiske tekst og tallene, men nogle tegnsætningskodepunkter i rasteren forbliver tvetydige, og menneskelig afgørelse mangler; tegnsætningsforskelle tæller stadig som fejl, og disse resultater er korpusdokumentation, ikke en generel nøjagtighedsgaranti
Geometri og søgetekst
HotPDF inverterer renderens sidetransformation, så ord-baselinjer forbliver justeret på sider roteret med 0, 90, 180 eller 270 grader
Hvert accepteret ord skrives med tekst-renderingstilstand 3 Tr , en tilpasset vandret tekstskala og en rotationsbevidst tekstmatrix, så sidens raster forbliver uændret, mens den valgbare indholdsorden bevares
En delt Type 0 Identity-H-font tildeler afgrænsede dokumentlokale CID'er til Unicode-skalærer og skriver et komplet ToUnicode-map, herunder UTF-16-surrogatmål for supplerende tegn
Tilstødende latinske og kyrilliske ord på samme baseline får et eksplicit Unicode-mellemrum, når deres geometri indikerer et ordhul; tilstødende CJK-ord bevarer deres originale tekst uden indsatte mellemrum
Behandling af en scannet PDF
Demo/Delphi/SearchableOCR/SearchableOCR.dpr-konsolleksemplet indlæser en scannet PDF, kører native RapidOCR med en eksplicit lokal sprogprofil, publicerer usynlig Unicode-tekst på alle berettigede sider og gemmer en ny PDF uden at åbne en viewer
SearchableOCR.exe scan.pdf searchable.pdf --dll C:\HotPDF\Lib\Native\RapidOCR\Win64\HotPDFRapidOCR.dll --models C:\HotPDF\Lib\Native\RapidOCR\Models --language ru --dpi 300
Brug --language ch til forenklet kinesisk eller --language chinese_cht til traditionelt kinesisk; DLL'en skal matche den eksekverbare fils arkitektur, og den valgte lokale modelpakke skal være installeret
Eksemplet nægter at overskrive en eksisterende outputfil og accepterer --replace-ocr, når et markeret HotPDF-OCR-lag opdateres
Ved Windows FPC tegnes JPEG-scans ind i det endelige bitmap-pixelformat, før genkendelsen, så LCL-formatkonverteringen bevarer det dekodede billede
Opdatering af et eksisterende OCR-lag
Sæt THPDFOCRTextLayerOptions.ReplaceExistingOCRTextLayer til True for at erstatte tidligere genererede, markerede HotPDF-OCR-streams på genkendte sider i samme transaktion som den nye tekst
Dette tilsidesætter SkipPagesWithText kun på markerede sider og virker efter gemning og genindlæsning; THPDFOCRTextLayerInfo.ReplacedPageCount rapporterer antallet af erstattede sider
Genkendelsesfejl og sider uden accepterede ord bevarer det gamle tekstlag; umarkerede streams, inklusive tredjeparts-OCR og lag fra tidligere HotPDF-udgivelser, bevares
Erstatning kobler de gamle OCR-contentstreams fra, men fjerner ikke fontressourcer eller optional-content-grupper, der stadig kan refereres andre steder; inkrementel gemning kan fastholde fortrængte objekter fra tidligere revisioner
Standarden forbliver at springe enhver side med udtrækkelig tekst over, inklusive et sidetal eller en sidehoved over en scan; at slå SkipPagesWithText fra genkender hele siden og kan duplikere eksisterende native tekst, så blandede sider kræver applikationsvalgt behandling
Grænser, annullering og atomicitet
THPDFOCRTextLayerOptions.Default aktiverer 300 DPI-genkendelse, springer sider over, der allerede eksponerer tekst, og begrænser sideantal, pixels, ord, UTF-16-enheder og genererede indholdsbytes
HotPDF validerer hvert motorresultat og bygger alt sideindhold, før én copy-on-write-graftransaktion påbegyndes, så motorfejl, ugyldig geometri, opbrugte budgetter, annullering eller commit-fejl efterlader den indlæste objektgraf uændret
Et tomt sideindeks-array vælger alle indlæste sider, mens duplikerede sideindeks genkendes én gang i først-set-orden
MaxTotalWords tæller alle modtagne ord, inklusive lav-confidence- eller ugyldige ord, der senere kasseres, og hver sideforespørgsel modtager kun den resterende ramme
Hvis ord- eller UTF-16-budgettet er opbrugt, og der stadig er en berettiget side tilbage, returnerer behandlingen otlsBudgetExceeded, før den side renderes eller genkendes, og publicerer ingen af de planlagte tekstlag; sider, der springes over på grund af eksisterende tekst, kræver ingen resterende genkendelsesramme
Optional-content-gruppering
Set UseOptionalContentGroup til at binde al genereret tekst til ét navngivet lag gennem hver sides Resources/Properties-ordbog
Denne indstilling kræver PDF 1.5 og følger StrictVersionLock; standarden holder den usynlige tekst uden for en optional-content-gruppe for bredest kompatibilitet
Overensstemmelsesnote
Det genererede søgbare lag bruger bevidst en ikke-indlejret syntetisk font, fordi renderingstilstand 3 aldrig tegner glyffer
Denne API producerer ikke i sig selv PDF/A-overholdende OCR-output, så en PDF/A-arbejdsgang bør bruge en tekstlagsvej med indlejret font og køre den ønskede overensstemmelsesvalidering inden publicering
Primary APIs
THotPDF.ApplyLoadedOCRTextLayerIHPDFOCREngineTHPDFOCRRequestTHPDFOCRWordTHPDFOCRTextLayerOptionsTHPDFOCRTextLayerInfoTHPDFOCRTextLayerStatus
Progressiv rendering og annullering · ExtractLoadedPageText Method