CreatePdfZXingBarcodeProvider fournit un IPdfBarcodeProvider à partir du chemin absolu explicite d’un pont natif compilé avec ZXing-C++ 2.3.0 et adapté à la cible
TryCreatePdfZXingBarcodeProvider signale les bibliothèques ou exports manquants et les incompatibilités d’ABI du pont, sans modifier le chemin de recherche du processus
La génération prend en charge Code128, QR, DataMatrix et PDF417 et renvoie des rectangles vectoriels noirs à la taille de module demandée ; Code128 accepte son jeu de caractères, tandis que les codes matriciels prennent en charge le texte Unicode
QuietZoneModules décale les rectangles noirs à gauche et en haut ; lors du placement ou de la rastérisation, l’appelant doit aussi réserver une zone blanche à droite et en bas
La reconnaissance reçoit des octets de niveaux de gris à un octet, rangés de haut en bas, avec largeur, hauteur et stride explicites ; les limites sont des rectangles de pixels semi-ouverts, et une confiance de 1 signifie un décodage accepté, pas une probabilité statistique
Les limites par défaut sont de 4,194,304 pixels, 32,768 octets de texte UTF-8 et 1,000,000 rectangles vectoriels, avec une zone de silence de 4 et un niveau de correction d’erreurs de 2
Pour QR, les niveaux 0–2 sélectionnent L, 3–4 M, 5–6 Q et 7–8 H ; PDF417 utilise 0–8 ; Code128 et DataMatrix ignorent cette option
La reconnaissance renvoie au plus 255 symboles, même si le maximum demandé est supérieur ; l’interface actuelle du fournisseur n’a pas de jeton d’annulation
Les instructions de compilation et l’exemple exécutable d’encodage/décodage se trouvent dans Native/BarcodeZXing et Tests/BarcodeProvider ; cette modification n’inclut ni binaire du pont natif ni sources des dépendances
Les exécutions réelles Delphi/FPC Win32/Win64 valident 60 allers-retours d’encodage/décodage, dont rotation, inversion et Unicode ; le pont natif Linux en valide 15, mais le fournisseur Pascal reste soumis aux dépendances Windows du 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;