Att generera en GS1QR‑streckkod är enkelt tills nyttolasten innehåller en gruppseparator. Det enda icke‑utskrivbara tecknet, ASCII 29, är det som talar om för en skanner var ett variabelt långt fält för applikationsidentifierare slutar. Utvecklare har kringgått detta med manuell byte‑sammanställning, anpassade kodare eller genom att dela upp nyttolasten, och varje lösning medförde en risk att producera symboler som kan skannas men som inte kan tolkas.
Aspose.BarCode for Python via .NET 26.6 löser det problemet med ett enda flagg. Egenskapen encode_gs1_separator_in_byte_mode tvingar QR‑kodningsmotorn att skriva GS1‑gruppseparatorer och tecknet % som råa byte, vilket bevarar den exakta GS1‑strukturen. Denna handledning täcker hela arbetsflödet för streckkodsgenerering och -igenkänning i python-net: installera SDK‑et, generera en kompatibel GS1QR‑symbol och verifiera på kodpunktnivå att separatorn överlevde rundresan.
Varför byte‑läge GS1‑separatorer är viktiga för GS1QR‑streckkoder
GS1QR är den tvådimensionella bärare som föredras inom försörjningskedjan, sjukvården och detaljhandeln, där en enda symbol måste innehålla en produktidentifierare, batchnummer, utgångsdatum och serienummer i en strukturerad nyttolast. GS1 Application Identifier‑syntaxen möjliggör detta, men den är beroende av grupseparatorn för att avgränsa fält vars längd inte är fast.
Överväg en nyttolast som kombinerar AI (10) för batchnummer och AI (21) för serienummer. Båda är variabel längd, så skannern behöver en explicit avgränsning mellan dem. Utan en korrekt kodad separator läser ett efterföljande system en sammansatt sträng istället för två fält. Streckkoden skannas framgångsrikt men levererar ändå fel data, den värsta typen av fel, eftersom inget i skanningshändelsen signalerar problemet.
Byte‑lägekodning löser detta vid källan. Kodaren slutar tolka separatorn som en strukturell markör och skriver den ordagrant in i datasegmentet. De praktiska fördelarna för Python‑utvecklare är direkta:
- Efterlevnad. Den utsända symbolen matchar GS1:s allmänna specifikationer snarare än att approximera dem.
- Enklare kod. Ingen manuell byte‑sammanställning, ingen anpassad kodningssubklass, ingen efterbearbetningspass.
- Testbarhet. Rundresan kan verifieras i ett enhetstest genom att påstå på avkodade kodpunkter.
Generera GS1QR‑streckkoder med Aspose.BarCode för Python
Aspose.BarCode for Python via .NET tillhandahåller ett hög‑nivå‑API för både streckkodsgenerering och -igenkänning. Installera det från PyPI:
pip install aspose-barcode-for-python-via-net
Två klasser utför det mesta av arbetet. BarcodeGenerator, från aspose.barcode.generation, bygger och renderar symboler. BarCodeReader, från aspose.barcode.barcoderecognition, avkodar dem. Genereringsinställningarna nås via ett parameterträd på generatorinstansen, där symbologi‑specifika alternativ såsom QR‑inställningarna finns under parameters.barcode.qr.
Referensmaterial finns tillgängligt på produktsidan, dokumentationssajten och API-referensen.
Om du har en licensfil, tillämpa den en gång vid applikationens start, innan något genererings‑ eller igenkänningsanrop:
from aspose.barcode import License
license = License()
license.set_license("Aspose.BarCode.Python.NET.lic")
Generera GS1QR-streckkod med Byte‑lägesseparator
- Importera de nödvändiga typerna -
BarcodeGeneratorochEncodeTypesför generering,BarCodeReaderochDecodeTypeför verifiering. - Instansiera
BarcodeGeneratormedEncodeTypes.GS1QRoch en GS1‑payload‑sträng. Parenteser markerar AI‑sektioner, som i(10)ASPOSE2001(21)ASPOSE2026. - Aktivera kodning av separator i byte‑läge genom att sätta
gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True. - Ange utdataupplösningen så att den renderade symbolen kan användas både i utskrift och på skärm.
- Spara bilden i ett förlustfritt format och läs sedan in den igen för att bekräfta kodningen.
Följande exempel demonstrerar hela arbetsflödet:
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)
Hur det fungerar
BarcodeGenerator(EncodeTypes.GS1QR, "(10)ASPOSE2001(21)ASPOSE2026")skapar en generator konfigurerad för GS1QR‑symboliken. Payloaden använder GS1‑syntax, där(10)är AI för batch‑ eller partinummer och(21)är AI för serienummer. Biblioteket analyserar den parenteserade formen och infogar de avgränsare som specifikationen kräver.gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = Trueaktiverar alternativet som introducerades i version 26.6. När det är aktiverat skriver kodaren gruppavgränsaren och%som råa byte i datasegmentet istället för att tolka dem.gen.parameters.resolution = 300renderar med 300 DPI. Symboler som endast visas på skärm är okej med standardinställningen, men allt som är avsett för en etikettprinter eller för förpackningsgrafik bör genereras i utskriftsupplösning istället för att skalas upp i efterhand.gen.save("gs1qr_test.png")skriver en förlustfri PNG och bevarar det exakta modulmönstret. Detta är viktigare för 2D‑symboler än för 1D, eftersom en QR‑avkodare samplar ett rutnät och är oförlåtande mot suddiga modulgränser.read_bar_codes()returnerar en iterable avBarCodeResult‑objekt, ochresult.code_textinnehåller den avkodade payloaden inklusive eventuella kontrolltecken. I en konsol visas avgränsaren som ingenting alls, vilket är exakt anledningen till att nästa avsnitt undersöker kodpunkter istället för att lita på den utskrivna outputen.
Läs och verifiera den genererade streckkoden
Att skriva ut den avkodade strängen bevisar att symbolen är läsbar, inte att den är korrekt. Eftersom gruppseparatorn är icke‑utskrivbar ser en nyttolast med en saknad separator och en med en korrekt separator identiska ut i en terminal. Verifiering måste ske på kodpunktnivå, vilket också gör det enkelt att påstå i en testsvit.
Steg
- Ladda den sparade PNG-filen med
BarCodeReaderochDecodeType.GS1QR. - Iterera över de avkodade resultaten.
- Inspektera varje teckens Unicode‑kodpunkt och leta efter
U+001D. - Dela upp nyttolasten på separatorn och jämför fälten med det ursprungliga inmatningsvärdet.
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.")
Hur det fungerar
- Att konfigurera läsaren med
DecodeType.GS1QRbegränsar igenkänningen till den symbologin, vilket både är snabbare och säkrare än att skanna efter alla typer, eftersom det förhindrar att en felaktig symbol avkodas som vanlig QR och tyst passerar. - Att materialisera resultaten med
list(...)innan kontroll gör det tomma fallet explicit. Ett igenkänningsfel returnerar en tom iterabel istället för att kasta ett undantag, så en oövervakadfor-loop över en misslyckad läsning avslutas tyst och rapporterar framgång. - Kodpunkt‑loopen är det faktiska påståendet. Att se
U+001Di utskriften bekräftar att byte‑läget fungerade; dess frånvaro betyder att separatorn har tagits bort eller omvandlats, oavsett hur ren den utskrivna nyttolasten ser ut. - Att dela på
\x1drekonstruerar de enskilda AI-fälten, vilket ger dig värden som kan jämföras med källdata i en CI‑pipeline.
Få en gratis licens
Aspose erbjuder en tillfällig gratislicens som tar bort utvärderingsvattenstämplar och låser upp full funktionalitet för testning. Begär en från Aspose temporära licenssida.
Gratis ytterligare resurser
Slutsats
Alternativet encode_gs1_separator_in_byte_mode ersätter en kategori av manuell byte‑hantering med ett enda booleskt värde. När den är aktiverad på QR‑parametrarna skrivs GS1‑gruppseparatorer, tillsammans med tecknet %, in i symbolen exakt enligt specifikationen.
Denna handledning täckte installation, generering av en GS1QR-symbol med byte‑lägesavgränsare och verifiering av resultatet på kodpunktnivå snarare än att lita på konsolutdata. Det verifieringssteget är den del som är mest värd att behålla. I GS1‑arbetsflöden är en streckkod som skannas inte samma som en streckkod som är korrekt, och ett kodpunktpåstående i ditt testpaket är det som skiljer de två åt innan etiketterna når produktion.
Vanliga frågor
Vad gör alternativet encode_gs1_separator_in_byte_mode? Den instruerar QR‑kod‑kodaren att sända GS1‑gruppseparatorn (ASCII 29) och tecknet
%som råa byte‑data snarare än att behandla dem som strukturella markörer, så att de förblir intakta i streckkodens nyttolast.Behöver jag en särskild licens för att använda GS1QR‑funktionerna?
GS1QR är en del av det standard Aspose.BarCode‑biblioteket. Du kan utvärdera det utan licens och begära en gratis tillfällig licens från Aspose‑webbplatsen för att ta bort utvärderingsvattenstämplar.Kan jag använda den här funktionen med andra QR‑kodtyper? Nej. Flaggan gäller för GS1QR‑kodningstypen. Standard QR och Micro QR‑kodare ignorerar den, eftersom GS1 Application Identifier‑parsing inte gäller för dem.
Är den genererade streckkodsbilden förlustfri? Att spara som PNG, standardinställningen, skapar en förlustfri bild som bevarar det exakta modulmönstret. Undvik JPEG för streckkoder, eftersom dess komprimeringsartefakter suddar ut modulkanterna och minskar läshastigheten.
Hur verifierar jag att separatorn kodades korrekt? Läs bilden igen med
BarCodeReadermedDecodeType.GS1QRoch inspektera kodpunkterna i den avkodade strängen. EnU+001Di nyttolasten bekräftar att gruppseparatorn kodades i byte‑läge.Påverkar aktivering av byte‑läge streckkodens storlek? Byte‑läge kan kräva fler databitar än alfanumeriskt läge, vilket kan driva symbolen till en större QR‑version. Biblioteket väljer automatiskt den minsta version som får plats, så ökningen är vanligtvis högst ett versionssteg.
Vilken version av Aspose.BarCode introducerade detta alternativ? Egenskapen
encode_gs1_separator_in_byte_modelades till i Aspose.BarCode for Python via .NET 26.6. Tidigare versioner kräver manuell byte-manipulering för att infoga gruppseparatorer.
