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

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

Progressiv rendering og annullering · ExtractLoadedPageText Method