Генерування штрихкоду GS1QR просте, доки корисне навантаження не містить розділювача груп. Цей один непечатний символ, ASCII 29, вказує сканеру, де закінчується поле ідентифікатора застосування змінної довжини. Розробники обходили це за допомогою ручного складання байтів, спеціальних кодувальників або розділення корисного навантаження, і кожен такий обхідний шлях несе ризик створення символів, які скануються, але не розбираються.
Aspose.BarCode for Python via .NET 26.6 усуває цю проблему за допомогою одного прапорця. Властивість encode_gs1_separator_in_byte_mode змушує QR‑кодувальник записувати розділювачі груп GS1 та символ % як необроблені байти, зберігаючи точну структуру GS1. У цьому підручнику розглядається повний процес створення та розпізнавання штрих‑коду в python‑net: встановлення SDK, генерація сумісного символу GS1QR та перевірка на рівні кодових точок, що розділювач пройшов круговий прохід.
Чому роздільники GS1 у байтовому режимі важливі для штрих-кодів GS1QR
GS1QR — це двовимірний носій, який обирають у ланцюжку постачання, охороні здоров’я та роздрібній торгівлі, де один символ має містити ідентифікатор продукту, номер партії, дату закінчення терміну придатності та серійний номер в одному структурованому навантаженні. Синтаксис ідентифікаторів застосувань GS1 робить це можливим, проте він залежить від розділювача групи для розмежування полів, довжина яких не фіксована.
Розгляньте корисне навантаження, що поєднує AI (10) для номера партії та AI (21) для серійного номера. Обидва мають змінну довжину, тому сканеру потрібна явна межа між ними. Без правильно закодованого роздільника downstream‑система читає один об’єднаний рядок замість двох полів. Штрих‑код сканується успішно, але все одно передає неправильні дані — найгірший тип збою, оскільки нічого в події сканування не сигналізує про проблему.
Кодування у байтовому режимі вирішує цю проблему на рівні джерела. Кодер припиняє інтерпретувати розділювач як структурний маркер і записує його дослівно у сегмент даних. Практичні переваги для розробників Python є прямими:
- Відповідність. Випущений символ відповідає загальним специфікаціям GS1, а не їх приблизним варіантам.
- Простіший код. Без ручного складання байтів, без власного підкласу кодувальника, без проходу постобробки.
- Тестованість. Круговий прохід можна перевірити в юніт‑тесті, здійснивши перевірку декодованих кодових точок.
Генерування GS1QR штрих‑коду за допомогою Aspose.BarCode for Python
Aspose.BarCode for Python via .NET забезпечує високорівневий API як для генерації штрих‑кодів, так і для їх розпізнавання. Встановіть його з PyPI:
pip install aspose-barcode-for-python-via-net
Два класи виконують більшість роботи. BarcodeGenerator, з aspose.barcode.generation, створює та відображає символи. BarCodeReader, з aspose.barcode.barcoderecognition, розкодує їх. Налаштування генерації доступні через дерево параметрів у екземплярі генератора, де специфічні для символьної системи параметри, такі як налаштування QR, розташовані під parameters.barcode.qr.
Довідкові матеріали доступні на сторінці продукту, сайті документації, та довіднику API.
Якщо у вас є файл ліцензії, застосуйте його один раз під час запуску програми, перед будь‑яким викликом генерації або розпізнавання:
from aspose.barcode import License
license = License()
license.set_license("Aspose.BarCode.Python.NET.lic")
Створити штрих-код GS1QR з роздільником у байтовому режимі
- Імпортуйте необхідні типи -
BarcodeGeneratorіEncodeTypesдля генерації,BarCodeReaderіDecodeTypeдля перевірки. - Створіть екземпляр
BarcodeGeneratorзEncodeTypes.GS1QRта рядком корисного навантаження GS1. Дужки позначають розділи AI, як у(10)ASPOSE2001(21)ASPOSE2026. - Увімкніть кодування роздільника у байтовому режимі, встановивши
gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True. - Встановіть вихідну роздільну здатність, щоб створений символ був придатним для друку та відображення на екрані.
- Збережіть зображення у безвтратному форматі, а потім зчитайте його назад, щоб підтвердити кодування.
Наступний приклад демонструє повний робочий процес:
from aspose.barcode.barcoderecognition import BarCodeReader, DecodeType
from aspose.barcode.generation import BarcodeGenerator, EncodeTypes
# 1. Create a GS1QR Barcode with Sample AI Data
# (10) = Batch or Lot Number, (21) = Serial Number
gen = BarcodeGenerator(EncodeTypes.GS1QR, "(10)ASPOSE2001(21)ASPOSE2026")
# 2. Turn on Byte-Mode Encoding for GS1 Group Separators
gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True
# 3. Set a Print-Ready Resolution
gen.parameters.resolution = 300
# 4. Save the Barcode to a PNG File
gen.save("gs1qr_test.png")
# 5. Verify by Reading the Barcode Back
reader = BarCodeReader("gs1qr_test.png", DecodeType.GS1QR)
for result in reader.read_bar_codes():
print("BarCode CodeText: " + result.code_text)
Як це працює
BarcodeGenerator(EncodeTypes.GS1QR, "(10)ASPOSE2001(21)ASPOSE2026")створює генератор, налаштований на символіку GS1QR. Навантаження використовує синтаксис GS1, де(10)— це AI номеру партії або лоту, а(21)— це AI серійного номера. Бібліотека розбирає форму в дужках і вставляє роздільники, які вимагає специфікація.gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = Trueактивує опцію, введену в 26.6. При увімкненні кодувальник записує розділювач групи та%як необроблені байти в сегменті даних, а не інтерпретує їх.gen.parameters.resolution = 300рендерить з роздільною здатністю 300 DPI. Символи, призначені лише для екрану, підходять за замовчуванням, але все, що призначене для принтера етикеток або пакувального оформлення, слід генерувати з роздільною здатністю друку, а не масштабувати пізніше.gen.save("gs1qr_test.png")записує безвтратний PNG, зберігаючи точний шаблон модулів. Це важливіше для 2D‑символів, ніж для 1D, оскільки QR‑декодер сканує сітку і не прощає розмитих меж модулів.read_bar_codes()повертає ітерабельний об’єктBarCodeResult, аresult.code_textмістить декодоване навантаження, включаючи будь‑які контрольні символи. У консолі розділювач не відображається взагалі, саме тому наступний розділ аналізує коди символів, а не довіряє виведеному тексту.
Прочитати та перевірити згенерований штрих-код
Виведення декодованого рядка доводить, що символ читається, а не те, що він правильний. Оскільки розділювач групи не друкується, корисне навантаження з відсутнім розділювачем і таке з правильним розділювачем виглядають ідентично в терміналі. Перевірка має відбуватися на рівні кодових точок, що також спрощує її застосування у тестовому наборі.
Кроки
- Завантажте збережений PNG за допомогою
BarCodeReaderіDecodeType.GS1QR. - Перебирайте декодовані результати.
- Перевірте Unicode‑код кожного символу, шукаючи
U+001D. - Розділіть корисне навантаження за роздільником і порівняйте поля з оригінальним вводом.
from aspose.barcode.barcoderecognition import BarCodeReader, DecodeType
GROUP_SEPARATOR = "\x1d"
# Load the Barcode Image Generated Earlier
reader = BarCodeReader("gs1qr_test.png", DecodeType.GS1QR)
results = list(reader.read_bar_codes())
if not results:
raise ValueError("No GS1QR barcode was detected in the image.")
for result in results:
decoded = result.code_text
print("Decoded GS1QR payload:", decoded)
# Inspect the Code Point of Every Character
for index, char in enumerate(decoded):
label = repr(char) if char.isprintable() else "<non-printable>"
print(f"Char {index}: {label} (U+{ord(char):04X})")
# Confirm the Separator Survived the Round Trip
if GROUP_SEPARATOR in decoded:
fields = decoded.split(GROUP_SEPARATOR)
print(f"Separator found. Payload splits into {len(fields)} field(s):")
for field in fields:
print(" -", field)
else:
print("Warning: no group separator present in the decoded payload.")
Як це працює
- Налаштування зчитувача за допомогою
DecodeType.GS1QRобмежує розпізнавання лише цією симболікою, що є швидшим і безпечнішим, ніж сканування всіх типів, оскільки запобігає декодуванню пошкодженого символу як звичайного QR і його тихому проходженню. - Матеріалізація результатів за допомогою
list(...)перед перевіркою робить випадок порожнього результату явним. Помилка розпізнавання повертає порожній ітерабельний об’єкт замість виключення, тому незахищений циклforнад невдалим зчитуванням завершується без повідомлень і повідомляє про успіх. - Цикл за кодовою точкою є фактичною перевіркою. Поява
U+001Dу виводі підтверджує, що байтовий режим спрацював; його відсутність означає, що розділювач був втрачений або трансформований, незалежно від того, наскільки чистим виглядає надрукований корисний навантаження. - Розбиття за
\x1dвідновлює окремі поля AI, надаючи вам значення, які можна порівнювати з вихідними даними у CI‑конвеєрі.
Отримати безкоштовну ліцензію
Aspose пропонує тимчасову безкоштовну ліцензію, яка видаляє водяні знаки оцінки та розблоковує повний функціонал для тестування. Замовте її на сторінці сторінка тимчасової ліцензії Aspose.
Безкоштовні додаткові ресурси
Висновок
Параметр encode_gs1_separator_in_byte_mode замінює категорію ручного оброблення байтів одним булевим значенням. Встановивши його, параметри QR та розділювачі груп GS1, разом із символом %, записуються у символ точно так, як вимагає специфікація.
У цьому підручнику розглянуто встановлення, створення символу GS1QR з роздільниками у байтовому режимі та перевірку результату на рівні кодових точок, а не довіру до виводу консолі. Цей крок перевірки — найцінніший. У процесах GS1 штрих‑код, який сканується, не обов’язково є правильним, і саме твердження про кодову точку у вашому наборі тестів розрізняє їх до того, як етикетки потраплять у виробництво.
Часті питання
Що робить параметр encode_gs1_separator_in_byte_mode?
Він інструктує QR‑енкодер виводити роздільник групи GS1 (ASCII 29) та символ%як необроблені байтові дані, а не розглядати їх як структурні маркери, тому вони залишаються незмінними у корисному навантаженні штрихкоду.Чи потрібна спеціальна ліцензія для використання функцій GS1QR? GS1QR є частиною стандартної бібліотеки Aspose.BarCode. Ви можете оцінювати її без ліцензії та запросити безкоштовну тимчасову ліцензію на веб‑сайті Aspose, щоб видалити водяні знаки оцінки.
Чи можу я використовувати цю функцію з іншими типами QR-кодів? Ні. Прапорець застосовується до типу кодування GS1QR. Стандартні QR та Micro QR кодувальники ігнорують його, оскільки розбір GS1 Application Identifier до них не застосовується.
Чи є згенероване зображення штрихкоду без втрат? Збереження у PNG, за замовчуванням, створює безвтратне зображення, яке зберігає точний шаблон модулів. Уникайте JPEG для штрихкодів, оскільки артефакти стиснення розмивають краї модулів і знижують рівень зчитування.
Як перевірити, що роздільник був закодований правильно? Прочитайте зображення назад за допомогою
BarCodeReader, використовуючиDecodeType.GS1QR, і перевірте кодові точки декодованого рядка.U+001Dу корисному навантаженні підтверджує, що груповий роздільник був закодований у байтовому режимі.Чи впливає включення байтового режиму на розмір штрихкоду? Байтовий режим може вимагати більше біт даних, ніж альфанумеричний режим, що може змусити символ перейти до більшої версії QR. Бібліотека автоматично вибирає найменшу підходящу версію, тому збільшення зазвичай становить не більше одного кроку версії.
Яка версія Aspose.BarCode ввела цю опцію?
Властивістьencode_gs1_separator_in_byte_modeбула додана в Aspose.BarCode for Python via .NET 26.6. Попередні версії вимагали ручного маніпулювання байтами для вбудовування розділювачів груп.
