CreatePdfZXingBarcodeProvider fornisce un IPdfBarcodeProvider usando il percorso assoluto esplicito di un bridge nativo compatibile con la destinazione, compilato da ZXing-C++ 2.3.0
TryCreatePdfZXingBarcodeProvider segnala librerie o export mancanti e ABI del bridge incompatibili, senza modificare il percorso di ricerca del processo
La generazione supporta Code128, QR, DataMatrix e PDF417 e restituisce rettangoli vettoriali neri con la dimensione di modulo richiesta; Code128 accetta il proprio insieme di caratteri supportati, mentre i codici a matrice accettano testo Unicode
QuietZoneModules sposta i rettangoli neri a destra e in basso per lasciare spazio sul lato sinistro e superiore; quando si posiziona o rasterizza il risultato, occorre riservare una zona bianca libera anche a destra e in basso
Il riconoscimento accetta byte in scala di grigi da un byte, ordinati dall'alto verso il basso, con larghezza, altezza e stride espliciti; i limiti sono rettangoli di pixel semiaperti e una confidence pari a 1 indica una decodifica accettata, non una probabilità statistica
I limiti predefiniti sono 4,194,304 pixel, 32,768 byte di testo UTF-8 e 1,000,000 rettangoli vettoriali, con quiet zone 4 e livello di correzione degli errori 2
Per QR, i livelli di correzione 0–2 selezionano L, 3–4 M, 5–6 Q e 7–8 H; PDF417 usa i livelli 0–8, mentre Code128 e DataMatrix ignorano questa opzione
Il riconoscimento restituisce al massimo 255 simboli anche quando il massimo richiesto è superiore; l'interfaccia del provider esistente non prevede un token di annullamento
Le istruzioni di compilazione e l'esempio eseguibile di codifica e decodifica si trovano in Native/BarcodeZXing e Tests/BarcodeProvider; questa modifica non include binari del bridge nativo né sorgenti delle dipendenze
L'esecuzione reale con Delphi/FPC su Win32/Win64 supera 60 round trip di codifica e decodifica, inclusi rotazione, inversione e Unicode; il bridge nativo su Linux supera 15 round trip, mentre il provider Pascal resta soggetto alle dipendenze Windows del wrapper
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;