CreatePdfZXingBarcodeProvider fornece um IPdfBarcodeProvider usando um caminho absoluto explícito para uma ponte nativa compatível com o alvo, compilada a partir do ZXing-C++ 2.3.0
TryCreatePdfZXingBarcodeProvider informa bibliotecas, exports ou ABI de ponte incompatíveis ausentes sem alterar o search path do processo
A geração suporta Code128, QR, DataMatrix e PDF417 e retorna retângulos vetoriais pretos no tamanho de módulo solicitado; o Code128 aceita seu conjunto de caracteres suportado, enquanto os códigos de matriz suportam texto Unicode
QuietZoneModules desloca os retângulos pretos à esquerda e no topo; quem chama também deve reservar uma zona branca de silêncio à direita e embaixo ao posicionar ou rasterizar o resultado
O reconhecimento aceita bytes em tons de cinza de um byte, no sentido de cima para baixo, com largura, altura e stride explícitos; os limites são retângulos de pixels semiabertos e confiança 1 significa uma decodificação aceita, e não uma probabilidade estatística
Os orçamentos padrão são 4,194,304 pixels, 32,768 bytes de texto UTF-8 e 1,000,000 retângulos vetoriais, com zona de silêncio 4 e nível de correção de erros 2
Os níveis de correção de erros do QR de 0–2 selecionam L, 3–4 M, 5–6 Q e 7–8 H; o PDF417 usa os níveis 0–8; Code128 e DataMatrix ignoram esta opção
O reconhecimento retorna no máximo 255 símbolos, mesmo quando o máximo solicitado é maior; a interface existente do provedor não tem token de cancelamento
As instruções de compilação e o exemplo executável de encode/decode estão em Native/BarcodeZXing e Tests/BarcodeProvider; nenhum binário de ponte nativa ou código-fonte de dependência é empacotado por esta mudança
A execução real em Delphi/FPC Win32/Win64 passa por 60 ciclos de encode/decode, incluindo rotação, inversão e Unicode; a execução da ponte nativa no Linux passa por 15 ciclos, enquanto o provedor Pascal continua sujeito às dependências Windows do 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;