CreatePdfZXingBarcodeProvider предоставляет IPdfBarcodeProvider по явному абсолютному пути к нативному мосту, собранному из ZXing-C++ 2.3.0 и соответствующему целевой платформе
TryCreatePdfZXingBarcodeProvider сообщает об отсутствующих библиотеках, экспортах или несовместимом ABI моста, не меняя путь поиска процесса
Генерация поддерживает Code128, QR, DataMatrix и PDF417 и возвращает чёрные векторные прямоугольники в запрошенном размере модуля; Code128 принимает свой поддерживаемый набор символов, а матричные коды — текст Unicode
QuietZoneModules смещает чёрные прямоугольники слева и сверху; при размещении или растеризации результата вызывающий также должен зарезервировать белую тихую зону справа и снизу
Распознавание принимает байты полутонового изображения сверху вниз по одному байту на пиксель с явными шириной, высотой и шагом строки; границы — полуоткрытые пиксельные прямоугольники, а достоверность 1 означает принятую расшифровку, а не статистическую вероятность
Бюджеты по умолчанию: 4 194 304 пикселя, 32 768 байтов текста UTF-8 и 1 000 000 векторных прямоугольников, тихая зона 4 и уровень коррекции ошибок 2
Уровни коррекции ошибок QR 0–2 выбирают L, 3–4 M, 5–6 Q и 7–8 H; PDF417 использует уровни 0–8; Code128 и DataMatrix эту опцию игнорируют
Распознавание возвращает не более 255 символов, даже если запрошенный максимум выше; у существующего интерфейса провайдера нет токена отмены
Инструкции по сборке и запускаемый пример кодирования/декодирования находятся в Native/BarcodeZXing и Tests/BarcodeProvider; это изменение не поставляет бинарник нативного моста и исходники зависимостей
Реальное выполнение Delphi/FPC Win32/Win64 проходит 60 циклов кодирования/декодирования, включая поворот, инверсию и Unicode; нативный мост на Linux проходит 15 циклов, а провайдер Pascal по-прежнему зависит от 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;