Перейти к содержимому
getnextpdf.com

Pro редакция

Barcode — глубокий справочник

Поверхность штрихкодов NextPDF Pro добавляет специализированные 2D- и снабженческие символики поверх модуля Core barcode. Она поставляет шесть разрешаемых через реестр 2D-кодировщиков (Micro QR, DotCode, Han Xin Code, JabCode, rMQR, GS1 DataBar), один кодировщик 2D-компонента GS1 Composite (CC-C), 1D-кодировщик USPS Intelligent Mail и парсер GS1 Application Identifier вместе с валидатором цепочки поставок. Кодирование детерминировано: одни и те же полезная нагрузка и опции всегда дают идентичную матрицу модулей. Эта страница описывает публичный API, контракт поведения, режимы отказа и доказательства соответствия по каждой символике.

Эта возможность поставляется в NextPDF Pro (nextpdf/pro) и активируется лицензионным конвертом уровня Pro. Развёртывание без этого права не загружает классы возможности. Сравнить редакции и получить лицензию.

Окно терминала
composer require nextpdf/pro:^3

Каждая символика привязывает собственное имя возможности в лицензионном конверте: barcode.microqr, barcode.dotcode, barcode.hanxin, barcode.jabcode, barcode.rmqr, barcode.gs1databar и barcode.gs1-composite-cc-c. Когда возможность не лицензирована, реестр не разрешает этот кодировщик. Кодирование полного символа GS1 Composite CC-A и CC-B не поддерживается (см. таблицу статуса поддержки), поэтому ключ barcode.gs1-composite-cc-a или barcode.gs1-composite-cc-b не регистрируется.

Ключи реестра берутся из значений вариантов Core NextPDF\Barcode\Barcode2DType плюс литеральный ключ gs1-composite-cc-c. Для разрешаемых через реестр кодировщиков стабильным контрактом является ключ реестра, а не FQCN кодировщика.

СимволПараметрыПоведение по умолчаниюВозвращаетБросает или завершается сПримечания
BarcodeProServiceProvider::register()BarcodeEncoderRegistry $registryПривязывает все семь ключей реестра ProvoidСтатический; идемпотентный — второй вызов заменяет первую привязку
MicroQrEncoder::encode()$data; опции ecLevel ('L', 'M', 'Q'; по умолчанию 'L'), version (1–4 или null), mask (0–3 или null)Автоматически выбирает наименьшую подходящую версию M1–M4Barcode2DDataInvalidArgumentExceptionНеподдерживаемое 'H' МОЛЧА приводится к 'L' (вызывающие стороны, которым нужен отказ в закрытое состояние при выборе EC, должны предварительно проверять); M1 игнорирует ecLevel
DotCodeEncoder::encode()$data; опции gs1 (bool, по умолчанию false), columns (int), rows (int), ratio (float, по умолчанию 1.5)Автоматический размер сетки при соотношении ширина:высота 1.5Barcode2DDataInvalidArgumentExceptionРазмеры сетки можно задать принудительно по каждой оси
HanXinEncoder::encode()$data; опции ecLevel (0–3, по умолчанию 1), version (1–84, по умолчанию авто)Наименьшая подходящая версияBarcode2DDataInvalidArgumentExceptionТекстовые режимы GB 2312 регионов 1/2 согласно ISO/IEC 20830
JabCodeEncoder::encode()$data; опции colors (4, 8, 16, 32, 64, 128, 256; по умолчанию 8), eccLevel (0–10, по умолчанию 3), symbolNumber (1–61, по умолчанию 1), symbolVersions, symbolPositions, symbolEccLevelsОдин 8-цветный символBarcodeColorDataInvalidArgumentException, JabCodeEncodingExceptionПолихромная матрица модулей с палитрой
RmqrEncoder::encode()$data; опции ecLevel (RmqrConstants::EC_M по умолчанию или EC_H), version (например 'R7x43', по умолчанию авто)Наименьшая подходящая из 32 версий ISO/IEC 23941Barcode2DDataInvalidArgumentExceptionОтклоняет полезные нагрузки, превышающие ёмкость; никогда не обрезает
Gs1DataBarEncoder::encode()$data; опции variant (Gs1DataBarVariant, по умолчанию OMNIDIRECTIONAL), linkage (bool, по умолчанию false), height (int, по умолчанию минимум варианта; по строке для Expanded Stacked), segmentsPerRow (int, по умолчанию 4; только Expanded Stacked)Кодирует вход GTIN (семейство §5/§6) или строку элементов GS1 AI (семейство §7)Barcode2DDataInvalidArgumentException; InvalidSymbolStructureExceptionКодируются все семь вариантов ISO/IEC 24724, приложение J
Gs1DataBarVariantisImplemented() возвращает true для всех семи вариантовперечисление (7 вариантов)minimumHeightX() и defaultHeightX() согласно приложению J
ImbEncoder::encode()string $code (20, 25, 29 или 31 цифра)65 четырёхуровневых штриховBarcodeDataInvalidArgumentExceptionИнтерфейс 1D-кодировщика; не ключ 2D-реестра
ImbEncoder::encodeToString()string $codeСостояния штрихов в виде строки T/A/D/FstringInvalidArgumentExceptionДля сверки с эталонными векторами USPS
Gs1DataParser::parse()string $dataАвтоматически распознаёт URI Digital Link, иначе формат (AI)valueGs1ParsedDataInvalidArgumentExceptionРеализует контракт Core Gs1DataParserInterface
Gs1DataParser::parseDigitalLink()string $uriРазбирает URI GS1 Digital LinkGs1ParsedDataInvalidArgumentException
Gs1DataParser::encodeForCode128() / ::encodeForQrCode() / ::encodeForDataMatrix()object $parsedПоследовательность байтов носителя с соглашением FNC1 этого носителяstringОжидает экземпляр Gs1ParsedData
Gs1DataParser::validateAI()string $ai, string $valueСтруктурная проверка одного значения AIbool
Gs1Validator::validate()string $barcodeData, Gs1SupplyChainProfile $profile (по умолчанию NONE)Статический быстрый путь поверх run()Gs1ValidationResultОшибки разбора становятся находками, а не исключениями
Gs1Validator::run()как у validate()Разбор, контрольные цифры, даты, перекрёстные правила AI, профильGs1ValidationResultПуть экземпляра; конструктор принимает внедрённый парсер
Gs1SupplyChainProfileNONE пропускает правила профиляперечисление (5 вариантов)RETAIL, FOOD, PHARMA, LOGISTICS, NONE; requiredAIs(), recommendedAIs(), primaryIdentifiers()
Gs1ValidationResultНаходки разбиваются по серьёзности при конструированииreadonly-классisValid, findings, errors, warnings, infos, parsedData; passes(), fails(), totalFindings()
Gs1ValidationFinding / Gs1FindingSeverityseverity, ruleId, message, необязательные ai и suggestionreadonly-класс / перечислениеУровни серьёзности: Error, Warning, Info
CompositeComponentA::codewordsFor()string $dataКодирование двоичной строки общего назначения §5, преобразование по основанию 928, самопроверка кругового проходаlist<int> (каждое 0–927)InvalidArgumentExceptionПередайте в linkFor() или во внешний рендерер носителя CC-A
CompositeComponentA::encode()игнорируетсяОтказывает в рендеринге полного символа CC-AUnsupportedBarcodeFeature (всегда)Отказ в закрытое состояние; см. Граничные случаи
CompositeComponentB::encode()игнорируетсяОтказывает в 2D-кодировании CC-BUnsupportedBarcodeFeature (всегда)linkFor() остаётся доступным (CCSI 901)
CompositeComponentC::encode()$data; опции передаются носителю PDF417; carrierType (по умолчанию GS1_128)Полный носитель PDF417 с ведущим кодовым словом CCSI 920Barcode2DDataBarcodeException; CompositeLinkageExceptionДопустим только носитель GS1_128
CompositeComponent{A,B,C}::linkFor()string $carrierId, array $codewords, CompositeCarrierType $carrierTypeСопоставляет кодовые слова компонента с 1D-носителемCompositeLinkageCompositeLinkageExceptionОбеспечивает допустимость носителя и ёмкость
CompositeVariant / CompositeCarrierTypeCC_A, CC_B, CC_C; GS1_DATABAR, GS1_128перечисленияmaxCodewords(), ccsi(), allowedCarriers(), usesFullPdf417()
public static function register(BarcodeEncoderRegistry $registry): void
public function encode(string $data, array $options = []): Barcode2DData
public static function validate(
string $barcodeData,
Gs1SupplyChainProfile $profile = Gs1SupplyChainProfile::NONE,
): Gs1ValidationResult
public function run(
string $barcodeData,
Gs1SupplyChainProfile $profile = Gs1SupplyChainProfile::NONE,
): Gs1ValidationResult
public function parse(string $data): Gs1ParsedData
public function parseDigitalLink(string $uri): Gs1ParsedData
public function encodeForCode128(object $parsed): string
public function encodeForQrCode(object $parsed): string
public function encodeForDataMatrix(object $parsed): string
public function validateAI(string $ai, string $value): bool
public function codewordsFor(string $data): array

Фабрика реестра Core по умолчанию предварительно привязывает кодировщики Pro как ленивые, лицензируемые по возможности записи. BarcodeProServiceProvider::register() — поддерживаемый резервный вариант для приложений, которые составляют реестр без значений по умолчанию, например для интеграций с фреймворками с собственным контейнером. Каждый кодировщик преобразует строковую полезную нагрузку и опции для конкретной символики в объект данных штрихкода, который рендерер страницы превращает в операторы содержимого PDF.

Gs1DataParser принимает читаемые человеком строки AI ((01)09521234543213(17)260131) и URI GS1 Digital Link. Он порождает закодированные последовательности байтов для носителей GS1-128, QR Code и Data Matrix, применяя соглашение FNC1 и разделителя групп каждого носителя. Gs1Validator выполняет конвейер из пяти шагов: разбор, контрольные цифры (GTIN, SSCC), логика дат, перекрёстные правила AI и обязательные AI отраслевого профиля. Ошибка разбора даёт недопустимый результат с находками; исключение не бросается. Находки разбиваются по серьёзности на ошибки, предупреждения и информационные сообщения.

Gs1DataBarEncoder::encode() диспетчеризует все семь вариантов ISO/IEC 24724:2011, приложение J, через один контракт опций. Omnidirectional, Truncated, Stacked и Stacked Omnidirectional используют общую алгебру ширины элементов §5 с контрольным знаком по модулю 79. Limited использует собственную алгебру символьных знаков §6 с контрольным знаком по модулю 89. Expanded и Expanded Stacked используют алгебру §7 (17,4): трёхрежимный автомат сжатия §7.2.5.5 (числовой, буквенно-цифровой и ISO/IEC 646) плюс контрольный знак по модулю 211 (§7.2.6). Семейство §5/§6 принимает 14-значный GTIN-14 с контрольной цифрой по модулю 10 или 13-значную идентификацию товара. Семейство §7 принимает сырую строку элементов GS1 AI (цифры, буквы, подмножество пунктуации ISO/IEC 646, FNC1 как байт 0x1D). Опция linkage устанавливает флаг связывания 2D-компонента для использования в качестве линейного компонента символа GS1 Composite.

CC-C порождает полный 2D-расширенный компонент поверх полного носителя PDF417, вставляя обязательное кодовое слово CCSI 920 как ведущее кодовое слово данных (ISO/IEC 24723:2010 §5.4). CC-A генерирует соответствующие кодовые слова данных по основанию 928 через codewordsFor() с самопроверкой кругового прохода кодирование–декодирование в закрытое состояние, но отказывает в рендеринге полного символа. CC-B полностью отказывает в 2D-кодировании. linkFor() сопоставляет кодовые слова компонента с 1D-носителем как значение CompositeLinkage, обеспечивая допустимость носителя и ёмкость.

  • Каждый кодировщик отклоняет пустую полезную нагрузку с InvalidArgumentException.
  • Micro QR: запрос неподдерживаемого уровня коррекции ошибок H МОЛЧА приводится к L, а не завершается ошибкой (предварительно проверяйте опции, если требуется отказ в закрытое состояние при выборе EC), поскольку ISO/IEC 18004 определяет для символов Micro QR только L, M и Q.
  • rMQR: уровень коррекции ошибок должен быть M или H; полезная нагрузка, превышающая ёмкость 32 версий, отклоняется, а не обрезается.
  • JabCode: количество цветов вне поддерживаемого набора степеней двойки, уровень ECC вне 0–10 или количество символов вне 1–61 отклоняется; последующие ошибки кодирования порождают JabCodeEncodingException.
  • GS1 DataBar: семейство §5/§6 проверяет контрольную цифру GTIN по модулю 10, а Limited ограничивает индикаторную цифру значениями 0 или 1. Семейство §7 отклоняет некодируемые символы и завершающие или сдвоенные разделители FNC1. Expanded Stacked отклоняет нечётное количество символьных знаков в строке и высоту строки ниже минимума 34X. Самопроверки внутренней структуры завершаются с InvalidSymbolStructureException, а не выдают некорректный символ.
  • GS1 Composite: encode() у CC-A и CC-B всегда бросает UnsupportedBarcodeFeature (отказ в закрытое состояние). CC-C бросает BarcodeException при пустых данных или переполнении ёмкости PDF417 (более 925 кодовых слов) и CompositeLinkageException для недопустимого носителя.
  • Валидация GS1 помечает некорректную структуру AI и неверные контрольные цифры до кодирования; недопустимая строка цепочки поставок никогда не порождает сканируемый соответствующий символ.
  • IMB принимает только вход из 20, 25, 29 или 31 цифры.
  • Кодирование штрихкодов не выполняет криптографии. Нет поведения, специфичного для режима FIPS; кодировщики работают одинаково независимо от профиля FIPS.

NextPDF реализует эти символики в соответствии с опубликованными стандартами, приведёнными ниже, и фиксирует трассировки эталонов в своём наборе тестов. Утверждения на этой странице — это заявления о возможностях: поддержка не есть соответствие, а соответствие не есть сертификация. NextPDF не имеет сертификации по символикам. Якоря пунктов перефразированы из исходного кода продукта и его фикстур соответствия; корпус движка соответствия не охватывает стандарты символик штрихкодов, поэтому приведённые ниже якоря обоснованы продуктом без идентификаторов фрагментов.

ПоверхностьСтандартЯкорь пункта (перефразировано)
Алгебра ширины элементов GS1 DataBarISO/IEC 24724:2011§5.2 структура символьного знака; приложение F.1 проработанный пример (Omnidirectional); приложение F.2 (Limited); приложение F.3 (Expanded)
Раскладки со стопкой GS1 DataBarISO/IEC 24724:2011§5.4 Stacked; §5.5 Stacked Omnidirectional; §7.2.8 разбиение на строки и разделители Expanded Stacked
Кодирование GS1 DataBar ExpandedISO/IEC 24724:2011§7.2.5.5 трёхрежимный автомат сжатия; §7.2.6 контрольный знак по модулю 211
Связывание GS1 Composite и CC-CISO/IEC 24723:2010§5.4 семантика кодового слова CCSI; §5.1 допустимость носителя
Кодовые слова GS1 Composite CC-AISO/IEC 24723:2010§5 кодирование двоичной строки общего назначения с преобразованием по основанию 928
Структура символа rMQRISO/IEC 23941:2022§6.3.2 таблица 1 размеры версий; §7.8.2 фиксированная маска; эталон format-info приложений C / I
Micro QRISO/IEC 18004ёмкость Micro QR M1–M4 и format-info
Han Xin CodeISO/IEC 20830:2021структура символа; паттерны поиска и выравнивания; режимы GB 2312 регионов 1/2; ECC Рида–Соломона; маскирование
JabCodeISO/IEC 23634структура символа, цвета и ECC
Почтовая символикаUSPS-B-3200структура полей Intelligent Mail Barcode

Вариант получает статус Verified, когда его прорабатывает фикстура в pro/tests/**, желательно трассировка эталона, привязанная к опубликованному проработанному примеру. Поставленный вариант без выделенной фикстуры остаётся Claimed. Вариант без кодировщика — Not supported.

Символика / вариантСтатусДоказательство (путь к тесту)Примечания
Micro QR (M1–M4)Verifiedpro/tests/Unit/Barcode/MicroQrEncoderTest.phpМодульный уровень; фикстура с трассировкой эталона из проработанного примера — отслеживаемая доработка
DotCodeVerifiedpro/tests/Unit/Barcode/DotCodeEncoderTest.php; DotCodeGfArithmeticTest.phpОхвачена арифметика поля Галуа; нет кругового прохода с декодером вендора
Han Xin CodeVerifiedpro/tests/Unit/Barcode/HanXinEncoderTest.php; HanXinRsEncodingTest.phpПуть кодирования Рида–Соломона прорабатывается явно
JabCode (1–61 символов, 4–256 цветов, ECC 0–10)Verifiedpro/tests/Unit/Barcode/JabCode/JabCodeEncoderTest.php (+ 11 покомпонентных наборов в том же каталоге)Каскад из нескольких символов и диапазон ECC прорабатываются; нет кругового прохода с декодером вендора
USPS Intelligent Mail BarcodeVerifiedpro/tests/Unit/Barcode/ImbEncoderTest.php; ImbRoutingCodeTest.phpПрорабатываются маршрутный код и валидация длины 20/25/29/31 цифр
rMQR — все 32 версии ISO/IEC 23941Verifiedpro/tests/Conformance/Barcode/Rmqr/AnnexValidatedSizesTest.php; RmqrAnnexCFormatInfoTest.php; pro/tests/Unit/Barcode/Rmqr/RmqrEncoderTest.phpПары версия/EC проверены по таблице 1 ISO/IEC 23941; эталонные значения format-info из приложений C / I
GS1 DataBar — Omnidirectional / TruncatedVerifiedpro/tests/Conformance/Barcode/Gs1DataBar/Gs1DataBarReferenceTest.phpБайт-равно проработанному примеру приложения F.1; Truncated использует то же кодирование при уменьшенной высоте
GS1 DataBar — Stacked / Stacked OmnidirectionalVerifiedpro/tests/Conformance/Barcode/Gs1DataBar/Gs1DataBarStackedReferenceTest.phpРазбиение на строки выведено из трассировки приложения F.1; построение разделителей согласно §5.4 и §5.5
GS1 DataBar — LimitedVerifiedpro/tests/Conformance/Barcode/Gs1DataBar/Gs1DataBarLimitedReferenceTest.php; pro/tests/Unit/Barcode/Gs1DataBar/Gs1DataBarLimitedEncoderTest.phpБайт-равно проработанному примеру приложения F.2 (товар 00098765432105)
GS1 DataBar — ExpandedVerifiedpro/tests/Conformance/Barcode/Gs1DataBar/Gs1DataBarExpandedReferenceTest.php; pro/tests/Integration/Barcode/Gs1DataBarExpandedTwoDecoderTest.phpБайт-равно проработанному примеру приложения F.3 ((10)12A); круговой проход с независимыми декодерами zxing-cpp и ZBar
GS1 DataBar — Expanded StackedVerifiedpro/tests/Unit/Barcode/Gs1DataBar/Gs1DataBarExpandedEncoderTest.php (случаи со стопкой); интеграционный круговой проход вышеТот же конвейер данных, что и у однострочного Expanded; проверяются разбиение на строки и разделители §7.2.8
GS1 Composite — CC-C (носитель PDF417)Verifiedpro/tests/Conformance/Barcode/Gs1Composite/CompositeComponentCTest.php; CompositeRoundtripTest.php; CompositeLinkageTest.phpОхвачены кодовое слово CCSI 920 и взаимодействие флага связывания
GS1 Composite — CC-APartialpro/tests/Unit/Barcode/Gs1Composite/CompositeComponentACodewordTest.php; pro/tests/Conformance/Barcode/Gs1Composite/CompositeComponentATest.phpГенерация кодовых слов Verified (основание 928, самопроверка кругового прохода); рендеринг полного символа не поддерживается — encode() отказывает в закрытое состояние
GS1 Composite — CC-BNot supportedpro/tests/Conformance/Barcode/Gs1Composite/CompositeComponentBTest.php (утверждает отказ в закрытое состояние)Нет 2D-кодирования; помощник связывания (CCSI 901) остаётся доступным
Парсер GS1 AIVerifiedpro/tests/Unit/Barcode/Gs1DataParserTest.php; Gs1DataParserFnc1Test.phpПрорабатываются оба формата ввода и все три выхода последовательностей байтов носителей
Валидатор цепочки поставок GS1Verifiedpro/tests/Unit/Barcode/Gs1ValidatorTest.php; Gs1ValidatorCrossAiTest.php; pro/tests/Unit/Barcode/Gs1/Gs1ValidatorDateValidationEdgeCaseTest.phpПрорабатываются контрольные цифры, обязательные перекрёстные комбинации AI и логика дат
  • Якоря доказательств на этой странице — это пути к тестам в pro/tests/**; репозиторий не поставляет каталог examples/ для этого модуля.
  • Семь имён возможностей, перечисленных в разделе «Доступность и лицензирование», — это ключи, которые привязывает поставщик служб. Кодировщик IMB конструируется напрямую и не имеет ключа реестра.
  • CC-A выдаёт только метод кодирования общего назначения; специфичные для приложений сжатые методы — это документированный остаток по плотности, а не пробел в корректности.

Эта страница документирует только внешне наблюдаемое поведение и поддерживаемую публичную поверхность API. Внутренние пути пространств имён, вспомогательные классы, таблицы механизмов, имена файлов runbook и префиксы тикетов вне области.