Menghasilkan barcode GS1QR sederhana sampai payload berisi Group Separator. Karakter tak dapat dicetak tunggal itu, ASCII 29, adalah yang memberi tahu pemindai di mana bidang Application Identifier dengan panjang variabel berakhir. Pengembang mengatasinya dengan perakitan byte manual, enkoder khusus, atau pemisahan payload, dan setiap solusi alternatif membawa risiko menghasilkan simbol yang dapat dipindai tetapi tidak dapat diparse.
Aspose.BarCode for Python via .NET 26.6 menghilangkan masalah itu dengan satu flag. Properti encode_gs1_separator_in_byte_mode memaksa encoder QR untuk menulis pemisah grup GS1 dan karakter % sebagai byte mentah, menjaga struktur GS1 yang tepat. Tutorial ini mencakup alur kerja lengkap pembuatan dan pengenalan barcode di python‑net: menginstal SDK, menghasilkan simbol GS1QR yang sesuai, dan memverifikasi pada tingkat kode poin bahwa pemisah tersebut bertahan selama proses round trip.
Mengapa Pemisah GS1 Mode-Byte Penting untuk Barcode GS1QR
GS1QR adalah pembawa dua dimensi pilihan dalam rantai pasokan, perawatan kesehatan, dan ritel, di mana satu simbol harus memuat pengidentifikasi produk, nomor batch, tanggal kedaluwarsa, dan nomor seri dalam satu payload terstruktur. Sintaks GS1 Application Identifier memungkinkan hal ini, tetapi bergantung pada Group Separator untuk memisahkan bidang yang panjangnya tidak tetap.
Pertimbangkan payload yang menggabungkan AI (10) untuk nomor batch dan AI (21) untuk nomor seri. Keduanya memiliki panjang variabel, sehingga pemindai memerlukan batas yang eksplisit di antara keduanya. Tanpa pemisah yang terkode dengan benar, sistem hilir membaca satu string yang digabungkan alih‑alih dua bidang. Barcode dipindai dengan sukses namun tetap menghasilkan data yang salah, jenis kegagalan terburuk, karena tidak ada yang menandakan masalah dalam peristiwa pemindaian.
Byte-mode encoding menyelesaikan ini di sumber. Encoder berhenti menginterpretasikan pemisah sebagai penanda struktural dan menuliskannya secara verbatim ke dalam segmen data. Manfaat praktis bagi pengembang Python bersifat langsung:
- Kepatuhan. Simbol yang dihasilkan sesuai dengan Spesifikasi Umum GS1 daripada mendekatinya.
- Kode lebih sederhana. Tidak ada perakitan byte manual, tidak ada subclass encoder khusus, tidak ada proses pasca‑pemrosesan.
- Dapat diuji. Putar balik dapat diverifikasi dalam unit test dengan melakukan assert pada kode poin yang terdekripsi.
Membuat Barcode GS1QR menggunakan Aspose.BarCode for Python
Aspose.BarCode for Python via .NET menyediakan API tingkat tinggi untuk pembuatan dan pengenalan barcode. Instal dari PyPI:
pip install aspose-barcode-for-python-via-net
Dua kelas melakukan sebagian besar pekerjaan. BarcodeGenerator, dari aspose.barcode.generation, membangun dan merender simbol. BarCodeReader, dari aspose.barcode.barcoderecognition, mendekode mereka. Pengaturan generasi dapat diakses melalui pohon parameter pada instance generator, di mana opsi khusus simbol seperti pengaturan QR berada di bawah parameters.barcode.qr.
Materi referensi tersedia di halaman produk, situs dokumentasi, dan referensi API.
Jika Anda memiliki file lisensi, terapkan satu kali saat aplikasi dimulai, sebelum panggilan generasi atau pengenalan apa pun:
from aspose.barcode import License
license = License()
license.set_license("Aspose.BarCode.Python.NET.lic")
Hasilkan Barcode GS1QR dengan Pemisah Mode-Byte
- Impor tipe yang diperlukan -
BarcodeGeneratordanEncodeTypesuntuk pembuatan,BarCodeReaderdanDecodeTypeuntuk verifikasi. - Instansiasi
BarcodeGeneratordenganEncodeTypes.GS1QRdan string payload GS1. Tanda kurung menunjukkan bagian AI, seperti(10)ASPOSE2001(21)ASPOSE2026. - Aktifkan pengkodean pemisah mode-byte dengan mengatur
gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True. - Atur resolusi output sehingga simbol yang dihasilkan dapat digunakan dalam cetakan maupun di layar.
- Simpan gambar ke format lossless, lalu baca kembali untuk mengonfirmasi pengkodean.
Contoh berikut menunjukkan alur kerja lengkap:
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)
Cara Kerjanya
BarcodeGenerator(EncodeTypes.GS1QR, "(10)ASPOSE2001(21)ASPOSE2026")membuat generator yang dikonfigurasi untuk simbolologi GS1QR. Payload menggunakan sintaks GS1, di mana(10)adalah AI Batch atau Lot Number dan(21)adalah AI Serial Number. Perpustakaan mem‑parsing bentuk yang berada dalam tanda kurung dan menyisipkan pemisah yang diperlukan oleh spesifikasi.gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = Truemengaktifkan opsi yang diperkenalkan pada versi 26.6. Dengan opsi ini diaktifkan, encoder menulis pemisah grup dan%sebagai byte mentah dalam segmen data alih‑alih menafsirkannya.gen.parameters.resolution = 300menghasilkan gambar dengan resolusi 300 DPI. Simbol yang hanya ditampilkan di layar sudah cukup dengan nilai default, tetapi apa pun yang ditujukan untuk printer label atau karya seni kemasan harus dihasilkan pada resolusi cetak, bukan di‑upscale setelahnya.gen.save("gs1qr_test.png")menulis file PNG lossless, mempertahankan pola modul yang tepat. Hal ini lebih penting untuk simbol 2D dibandingkan 1D, karena decoder QR mengambil sampel pada grid dan tidak toleran terhadap batas modul yang blur.read_bar_codes()mengembalikan iterable berisi objekBarCodeResult, danresult.code_textberisi payload yang telah didekode termasuk karakter kontrol apa pun. Di konsol, pemisah tidak ditampilkan sama sekali, itulah mengapa bagian berikutnya memeriksa kode titik (code points) alih‑alih mempercayai output yang tercetak.
Baca dan Verifikasi Barcode yang Dihasilkan
Mencetak string yang telah didekode membuktikan bahwa simbol dapat dibaca, bukan bahwa itu benar. Karena pemisah grup tidak dapat dicetak, payload dengan pemisah yang hilang dan yang dengan pemisah yang benar tampak identik di terminal. Verifikasi harus dilakukan pada tingkat kode‑poin, yang juga memudahkan untuk menegaskan dalam suite pengujian.
Langkah
- Muat PNG yang disimpan dengan
BarCodeReaderdanDecodeType.GS1QR. - Iterasi hasil yang didekode.
- Periksa titik kode Unicode setiap karakter, mencari
U+001D. - Bagi payload pada pemisah dan bandingkan bidangnya dengan input asli.
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.")
Cara Kerjanya
- Mengonfigurasi pembaca dengan
DecodeType.GS1QRmembatasi pengenalan hanya pada simbolologi tersebut, yang lebih cepat dan lebih aman dibandingkan memindai semua tipe, karena mencegah simbol yang rusak di‑decode sebagai QR biasa dan lewat diam‑diam. - Mematerialisasikan hasil dengan
list(...)sebelum memeriksa membuat kasus kosong menjadi eksplisit. Kegagalan pengenalan mengembalikan iterable kosong alih‑alih melempar pengecualian, sehingga loopforyang tidak dilindungi atas bacaan yang gagal selesai secara diam‑diam dan melaporkan keberhasilan. - Loop kode‑poin adalah asersi sebenarnya. Melihat
U+001Ddalam output mengonfirmasi mode byte berhasil; ketidakhadirannya berarti pemisah telah dihapus atau diubah, terlepas dari seberapa bersih payload yang dicetak. - Memisahkan pada
\x1dmerekonstruksi bidang AI individual, memberi Anda nilai yang dapat dibandingkan dengan data sumber dalam pipeline CI.
Dapatkan Lisensi Gratis
Aspose menawarkan lisensi gratis sementara yang menghapus watermark evaluasi dan membuka semua fungsi penuh untuk pengujian. Minta satu dari halaman lisensi sementara Aspose.
Sumber Daya Tambahan Gratis
Kesimpulan
Opsi encode_gs1_separator_in_byte_mode menggantikan kategori penanganan byte manual dengan satu boolean. Aktifkan pada parameter QR dan pemisah grup GS1, bersama dengan karakter %, akan ditulis ke dalam simbol persis seperti yang diminta oleh spesifikasi.
Tutorial ini mencakup instalasi, pembuatan simbol GS1QR dengan pemisah mode‑byte, dan memverifikasi hasil pada tingkat kode‑poin alih‑alih mempercayai output konsol. Langkah verifikasi itu adalah bagian yang paling berharga untuk dipertahankan. Dalam alur kerja GS1, barcode yang dipindai tidak sama dengan barcode yang benar, dan pernyataan kode‑poin dalam suite pengujian Andalah yang membedakan keduanya sebelum label mencapai produksi.
FAQs
Apa yang dilakukan opsi encode_gs1_separator_in_byte_mode? Ini memberi instruksi kepada encoder QR untuk menghasilkan pemisah grup GS1 (ASCII 29) dan karakter
%sebagai data byte mentah alih‑alih memperlakukannya sebagai penanda struktural, sehingga mereka tetap utuh dalam muatan kode batang.Apakah saya memerlukan lisensi khusus untuk menggunakan fitur GS1QR? GS1QR adalah bagian dari pustaka standar Aspose.BarCode. Anda dapat mengevaluasinya tanpa lisensi, dan meminta lisensi sementara gratis dari situs web Aspose untuk menghapus watermark evaluasi.
Apakah saya dapat menggunakan fitur ini dengan tipe QR code lain? Tidak. Bendera ini berlaku untuk tipe enkode GS1QR. Encoder QR standar dan Micro QR mengabaikannya, karena parsing Identifier Aplikasi GS1 tidak berlaku untuk mereka.
Apakah gambar barcode yang dihasilkan lossless? Menyimpan ke PNG, yang merupakan default, menghasilkan gambar lossless yang mempertahankan pola modul yang tepat. Hindari JPEG untuk barcode, karena artefak kompresinya mengaburkan tepi modul dan mengurangi tingkat pembacaan.
Bagaimana cara saya memverifikasi bahwa pemisah telah dikodekan dengan benar?
Baca kembali gambar denganBarCodeReadermenggunakanDecodeType.GS1QRdan periksa titik kode dari string yang didekode. SebuahU+001Ddalam payload mengonfirmasi bahwa pemisah grup telah dikodekan dalam mode byte.Apakah mengaktifkan byte-mode memengaruhi ukuran barcode? Byte mode dapat memerlukan lebih banyak bit data dibandingkan mode alfanumerik, yang dapat mendorong simbol ke versi QR yang lebih besar. Perpustakaan secara otomatis memilih versi terkecil yang cocok, sehingga peningkatan biasanya hanya satu langkah versi paling banyak.
Versi berapa dari Aspose.BarCode yang memperkenalkan opsi ini? Properti
encode_gs1_separator_in_byte_modeditambahkan di Aspose.BarCode for Python via .NET 26.6. Versi sebelumnya memerlukan manipulasi byte manual untuk menyisipkan pemisah grup.
