CreatePdfZXingBarcodeProvider poskytuje IPdfBarcodeProvider s explicitní absolutní cestou k nativnímu bridge pro daný cíl, sestavenému ze ZXing-C++ 2.3.0
TryCreatePdfZXingBarcodeProvider ohlásí chybějící knihovny, exporty nebo nekompatibilní ABI bridge a nemění vyhledávací cestu procesu
Generování podporuje Code128, QR, DataMatrix a PDF417 a vrací černé vektorové obdélníky v požadované velikosti modulu; Code128 přijímá svůj podporovaný znakový repertoár, maticové kódy podporují text Unicode
QuietZoneModules posune černé obdélníky v levém a horním okraji; při umisťování nebo rasterizaci výsledku musí volající vyhradit bílou klidovou zónu i vpravo a dole
Rozpoznávání přijímá jednobajtové grayscale vzorky shora dolů, explicitní šířku, výšku a stride; hranice jsou polootevřené pixelové obdélníky a confidence 1 znamená přijaté dekódování, nikoli statistickou pravděpodobnost
Výchozí rozpočty jsou 4,194,304 pixelů, 32,768 bajtů textu UTF-8 a 1,000,000 vektorových obdélníků, s klidovou zónou 4 a úrovní korekce chyb 2
Úrovně korekce chyb QR 0–2 volí L, 3–4 M, 5–6 Q a 7–8 H; PDF417 používá úrovně 0–8; Code128 a DataMatrix tuto volbu ignorují
Rozpoznávání vrátí nejvýše 255 symbolů, i když je požadované maximum vyšší; současné rozhraní provideru nemá cancellation token
Pokyny k sestavení a spustitelný příklad encode/decode jsou v Native/BarcodeZXing a Tests/BarcodeProvider; tato změna nepřibaluje binární nativní bridge ani zdrojové kódy závislostí
Skutečné spuštění v Delphi/FPC na Win32/Win64 úspěšně prošlo 60 encode/decode cykly včetně rotace, inverze a Unicode; nativní bridge na Linuxu prošel 15 cykly, ale Pascal provider dál podléhá závislostem wrapperu na Windows
Provider := CreatePdfZXingBarcodeProvider( BridgePath, TPdfZXingBarcodeOptions.Default); Rects := GeneratePdfBarcode(pbkQr, 'Invoice 12345', 2, Provider); Results := RecognisePdfBarcodes(Pixels, Width, Height, Stride, Provider, 256);
type
EPdfBarcodeBackendError = class(EPdfProduction);
TPdfZXingBarcodeOptions = record
MaxPixels: Int64;
MaxTextBytes: Integer;
MaxRectangles: Integer;
QuietZoneModules: Integer;
ErrorCorrectionLevel: Integer;
class function Default: TPdfZXingBarcodeOptions; static;
end;
// Recognition accepts top-down, one-byte grayscale pixels with explicit stride
// Bounds are half-open pixel rectangles; Confidence=1 denotes a valid decode
// The backend does not supply a statistical confidence estimate
// A recognition call returns at most 255 symbols, even with a higher requested limit
function CreatePdfZXingBarcodeProvider(const BridgeLibraryPath: string;
const Options: TPdfZXingBarcodeOptions): IPdfBarcodeProvider;
function TryCreatePdfZXingBarcodeProvider(const BridgeLibraryPath: string;
const Options: TPdfZXingBarcodeOptions; out Provider: IPdfBarcodeProvider;
out ErrorMessage: string): Boolean;