PDFium Delphi Component Docs

Опциональный провайдер штрихкодов ZXing

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;