Generování GS1QR čárového kódu je jednoduché, dokud payload neobsahuje skupinový oddělovač. Tento jediný netisknutelný znak, ASCII 29, je to, co říká skeneru, kde končí pole identifikátoru aplikace proměnné délky. Vývojáři to obcházeli ručním sestavováním bajtů, vlastními enkodéry nebo rozdělením payloadu a každé řešení neslo riziko vytvoření symbolů, které lze načíst, ale nelze je parsovat.
Aspose.BarCode for Python via .NET 26.6 odstraňuje tento problém jedním příznakem. Vlastnost encode_gs1_separator_in_byte_mode nutí QR enkodér zapisovat GS1 skupinové oddělovače a znak % jako surové bajty, čímž zachovává přesnou strukturu GS1. Tento tutoriál pokrývá kompletní workflow generování a rozpoznávání čárových kódů v python‑net: instalaci SDK, generování kompatibilního symbolu GS1QR a ověření na úrovni kódových bodů, že oddělovač přežil celý proces.
Proč jsou v GS1QR čárových kódech důležité separátory GS1 v byte‑módu
GS1QR je dvourozměrný nosič volený v dodavatelském řetězci, zdravotnictví a maloobchodu, kde jediný symbol musí obsahovat identifikátor produktu, číslo šarže, datum expirace a sériové číslo v jednom strukturovaném payloadu. Syntaxe GS1 Application Identifier to umožňuje, ale závisí na Group Separatoru k oddělení polí, jejichž délka není pevná.
Zvažte payload kombinující AI (10) pro číslo šarže a AI (21) pro sériové číslo. Obě jsou proměnné délky, takže skener potřebuje explicitní hranici mezi nimi. Bez správně zakódovaného oddělovače downstream systém přečte jeden spojený řetězec místo dvou polí. Čárový kód se úspěšně načte a přesto dodá špatná data, nejhorší typ selhání, protože v události skenování není žádný signál o problému.
Kódování v režimu bajtů to řeší již při zdroji. Kodér přestane interpretovat oddělovač jako strukturální značku a zapíše jej doslovně do datového segmentu. Praktické výhody pro vývojáře Pythonu jsou přímé:
- Soulad. Vytvořený symbol odpovídá obecné specifikaci GS1 místo toho, aby ji jen přibližně napodoboval.
- Jednodušší kód. Žádná ruční sestavování bajtů, žádná vlastní podtřída enkodéru, žádný post‑processing krok.
- Testovatelnost. Zpětný převod lze ověřit v unit testu pomocí aserce na dekódované kódové body.
Generování GS1QR čárových kódů pomocí Aspose.BarCode pro Python
Aspose.BarCode for Python via .NET poskytuje vysoce úrovňové API pro generování i rozpoznávání čárových kódů. Nainstalujte jej z PyPI:
pip install aspose-barcode-for-python-via-net
Dvě třídy vykonávají většinu práce. BarcodeGenerator, z aspose.barcode.generation, vytváří a vykresluje symboly. BarCodeReader, z aspose.barcode.barcoderecognition, je dekóduje. Nastavení generování jsou přístupná přes strom parametrů na instanci generátoru, kde specifické možnosti pro symbologii, jako jsou nastavení QR, jsou umístěny pod parameters.barcode.qr.
Referenční materiály jsou k dispozici na stránce produktu, na dokumentační stránce, a v referenci API.
Pokud máte soubor licence, použijte jej jednou při spuštění aplikace, před jakýmkoli voláním generování nebo rozpoznávání:
from aspose.barcode import License
license = License()
license.set_license("Aspose.BarCode.Python.NET.lic")
Vytvořit GS1QR čárový kód s oddělovačem v byte-módu
- Importujte požadované typy -
BarcodeGeneratoraEncodeTypespro generování,BarCodeReaderaDecodeTypepro ověření. - Vytvořte instanci
BarcodeGeneratorsEncodeTypes.GS1QRa řetězcem GS1 payload. Závorky označují sekce AI, např.(10)ASPOSE2001(21)ASPOSE2026. - Povolte kódování oddělovače v byte‑mode nastavením
gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True. - Nastavte výstupní rozlišení, aby byl vykreslený symbol použitelný jak v tisku, tak na obrazovce.
- Uložte obrázek do bezztrátového formátu a poté jej načtěte zpět pro potvrzení kódování.
Následující příklad demonstruje kompletní pracovní postup:
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)
Jak to funguje
BarcodeGenerator(EncodeTypes.GS1QR, "(10)ASPOSE2001(21)ASPOSE2026")vytváří generátor nakonfigurovaný pro symbologii GS1QR. Náklad používá syntaxi GS1, kde(10)představuje AI pro číslo šarže nebo lotu a(21)AI pro sériové číslo. Knihovna analyzuje závorkovou formu a vloží oddělovače požadované specifikací.gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = Trueaktivuje možnost zavedenou ve verzi 26.6. Pokud je povolena, kodér zapisuje skupinový oddělovač a%jako surové bajty v datovém segmentu místo jejich interpretace.gen.parameters.resolution = 300vykresluje při 300 DPI. Symboly určené pouze pro obrazovku jsou v výchozím nastavení v pořádku, ale vše, co je určeno pro tiskárnu štítků nebo obalové grafiky, by mělo být generováno v tiskovém rozlišení, místo aby se později zvětšovalo.gen.save("gs1qr_test.png")zapisuje bezztrátový PNG, zachovávající přesný vzor modulů. To je důležitější pro 2D symboly než pro 1D, protože QR dekodér vzorkuje mřížku a netoleruje rozmazané hranice modulů.read_bar_codes()vrací iterovatelný objektBarCodeResult, aresult.code_textobsahuje dekódovaný náklad včetně všech řídicích znaků. V konzoli se oddělovač vůbec nezobrazuje, což je přesně důvod, proč následující sekce zkoumá kódové body místo spoléhaní se na vytištěný výstup.
Přečtěte a ověřte vygenerovaný čárový kód
Vytištění dekódovaného řetězce dokazuje, že symbol je čitelný, nikoli že je správný. Protože skupinový oddělovač není tisknutelný, payload s chybějícím oddělovačem a ten se správným oddělovačem vypadají v terminálu identicky. Ověření musí probíhat na úrovni kódových bodů, což také usnadňuje jeho ověření v testovací sadě.
Kroky
- Načtěte uložený PNG pomocí
BarCodeReaderaDecodeType.GS1QR. - Procházejte dekódované výsledky.
- Zkontrolujte Unicode kódový bod každého znaku a hledejte
U+001D. - Rozdělte payload podle oddělovače a porovnejte pole s původním vstupem.
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.")
Jak to funguje
- Konfigurace čtečky pomocí
DecodeType.GS1QRomezuje rozpoznávání na tuto symbologii, což je rychlejší a bezpečnější než skenování všech typů, protože zabraňuje dekódování poškozeného symbolu jako běžného QR a tichému průchodu. - Materializace výsledků pomocí
list(...)před kontrolou činí prázdný případ explicitním. Selhání rozpoznání vrací prázdný iterovatelný objekt místo výjimky, takže nechráněná smyčkafornad neúspěšným čtením skončí tiše a nahlásí úspěch. - Smyčka přes kódy znaků je skutečným tvrzením. Zobrazení
U+001Dve výstupu potvrzuje, že režim bajtů fungoval; jeho absence znamená, že oddělovač byl vynechán nebo transformován, bez ohledu na to, jak čistý vypadá vytištěný payload. - Rozdělení na
\x1drekonstruuje jednotlivá pole AI, což vám poskytne hodnoty, které lze porovnat se zdrojovými daty v CI pipeline.
Získejte bezplatnou licenci
Aspose nabízí dočasnou bezplatnou licenci, která odstraňuje hodnotící vodoznaky a odemyká plnou funkčnost pro testování. Požádejte o ni na Stránka dočasné licence Aspose.
Další bezplatné zdroje
Závěr
Možnost encode_gs1_separator_in_byte_mode nahrazuje kategorii ručního zpracování bajtů jediným booleanem. Nastavte ji v parametrech QR a GS1 skupinové oddělovače, spolu se znakem %, jsou zapsány do symbolu přesně tak, jak to vyžaduje specifikace.
Tento tutoriál pokryl instalaci, generování symbolu GS1QR s oddělovači v byte‑mode a ověření výsledku na úrovni kódových bodů místo spoléhaní se na výstup v konzoli. Tento krok ověření je část, která stojí nejvíce za zachování. V pracovních postupech GS1 není naskenovaný čárový kód totéž co správný čárový kód a tvrzení o kódových bodech ve vašem testovacím balíčku je to, co je od sebe odlišuje, než se štítky dostanou do výroby.
Často kladené otázky
Co dělá volba encode_gs1_separator_in_byte_mode? Instrukuje QR enkodér, aby emitoval GS1 oddělovač skupiny (ASCII 29) a znak
%jako surová bajtová data místo toho, aby je považoval za strukturované značky, takže zůstávají v obsahu čárového kódu nedotčeny.Potřebuji speciální licenci pro používání funkcí GS1QR? GS1QR je součástí standardní knihovny Aspose.BarCode. Můžete ji vyzkoušet bez licence a požádat o bezplatnou dočasnou licenci na webu Aspose, abyste odstranili vodotisky z hodnocení.
Mohu tuto funkci použít s jinými typy QR kódů? Ne. Příznak se vztahuje na typ kódování GS1QR. Standardní QR a Micro QR enkodéry jej ignorují, protože parsování GS1 Application Identifier se na ně nevztahuje.
Je generovaný obrázek čárového kódu bezeztrátový? Ukládání do PNG, výchozí formát, vytváří bezeztrátový obrázek, který zachovává přesný vzor modulů. Vyhněte se JPEGu pro čárové kódy, protože jeho kompresní artefakty rozmazávají hrany modulů a snižují úspěšnost čtení.
Jak mohu ověřit, že oddělovač byl zakódován správně? Načtěte obrázek zpět pomocí
BarCodeReaders použitímDecodeType.GS1QRa prozkoumejte kódové body dekódovaného řetězce.U+001Dv nákladu potvrzuje, že skupinový oddělovač byl zakódován v režimu bajtů.Ovlivňuje povolení byte-módu velikost čárového kódu? Byte mód může vyžadovat více datových bitů než alfanumerický mód, což může posunout symbol na vyšší verzi QR kódu. Knihovna automaticky vybere nejmenší verzi, která se vejde, takže nárůst je obvykle nejvýše o jeden krok verze.
Která verze Aspose.BarCode tuto možnost zavedla? Vlastnost
encode_gs1_separator_in_byte_modebyla přidána v Aspose.BarCode for Python via .NET 26.6. Starší verze vyžadují ruční manipulaci s bajty pro vložení skupinových oddělovačů.
