GS1QR バーコードの生成は、ペイロードにグループセパレータが含まれるまで簡単です。その単一の非印刷可能文字、ASCII 29 は、スキャナーに可変長のアプリケーション識別子フィールドの終了位置を示すものです。開発者は手動のバイト組み立て、カスタムエンコーダ、またはペイロードの分割で回避策を講じましたが、すべての回避策には、スキャンはできるものの解析できないシンボルが生成されるリスクが伴いました。

Aspose.BarCode for Python via .NET 26.6 は、単一のフラグでその問題を解決します。encode_gs1_separator_in_byte_mode プロパティは、QR エンコーダに GS1 グループ区切り文字と % 文字を生バイトとして書き込ませ、正確な GS1 構造を保持します。このチュートリアルでは、python-net での完全なバーコード生成および認識ワークフローを取り上げます。SDK のインストール、準拠した GS1QR シンボルの生成、そして区切り文字が往復で生き残ったことをコードポイントレベルで検証します。

GS1QRバーコードにおけるバイトモードGS1区切り文字が重要な理由

GS1QR は、サプライチェーン、ヘルスケア、小売業で選ばれる二次元キャリアであり、単一のシンボルが製品識別子、ロット番号、賞味期限、シリアル番号を 1 つの構造化ペイロードに保持する必要があります。GS1 アプリケーション識別子構文によりこれが可能になりますが、長さが固定されていないフィールドを区切るためにグループセパレータに依存しています。

バッチ番号用の AI (10) とシリアル番号用の AI (21) を組み合わせたペイロードを考えてみてください。両方とも可変長であるため、スキャナーはそれらの間に明示的な境界が必要です。正しくエンコードされた区切り文字がないと、下流システムは2つのフィールドではなく1つの連結文字列として読み取ってしまいます。バーコードは正常にスキャンされますが、問題を示すシグナルがスキャンイベントに全くないため、誤ったデータが配信され続けます。これは最も悪い種類の失敗です。

Byte-mode エンコーディングは、ソースでこれを解決します。エンコーダは区切り文字を構造マーカーとして解釈するのを停止し、データセグメントにそのまま書き込みます。Python 開発者にとっての実用的なメリットは直接的です:

  • コンプライアンス. 発行されたシンボルは、近似するのではなく、GS1一般仕様に一致します。
  • シンプルなコード. 手動のバイト組み立てやカスタムエンコーダのサブクラス、ポストプロセスのパスが不要です。
  • テスト容易性. デコードされたコードポイントに対してアサートすることで、ユニットテストで往復が検証可能です。

Aspose.BarCode for Python を使用した GS1QR バーコードの生成

Aspose.BarCode for Python via .NET は、バーコードの生成と認識の両方に対応したハイレベル API を提供します。PyPI からインストールしてください:

pip install aspose-barcode-for-python-via-net

ほとんどの作業は2つのクラスが担います。BarcodeGeneratoraspose.barcode.generation から取得し、シンボルを構築および描画します。BarCodeReaderaspose.barcode.barcoderecognition から取得し、シンボルをデコードします。生成設定はジェネレータインスタンスのパラメータツリーを通じてアクセスでき、QR 設定などのシンボロジー固有オプションは parameters.barcode.qr の下にあります。

リファレンスマテリアルは、製品ページドキュメントサイト、およびAPI リファレンスで利用できます。

ライセンス ファイルがある場合は、生成または認識の呼び出しを行う前に、アプリケーションの起動時に一度だけ適用してください。

from aspose.barcode import License

license = License()
license.set_license("Aspense.BarCode.Python.NET.lic")

バイトモード区切り文字を使用した GS1QR バーコードの生成

  1. 必要な型をインポート - BarcodeGeneratorEncodeTypes は生成に、BarCodeReaderDecodeType は検証に使用します。
  2. BarcodeGenerator をインスタンス化 するには、EncodeTypes.GS1QR と GS1 ペイロード文字列を使用します。丸括弧は AI セクションを示し、例として (10)ASPOSE2001(21)ASPOSE2026 のようになります。
  3. バイトモードのセパレータエンコーディングを有効化 するには、gen.parameters.barcode.qr.encode_gs1_separator_in_byte_mode = True を設定します。
  4. 出力解像度を設定 して、レンダリングされたシンボルが印刷でも画面でも使用できるようにします。
  5. 画像を保存 してロスレス形式にし、エンコードを確認するために再度読み取ります。

以下の例は、完全なワークフローを示します:

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 を書き出し、正確なモジュールパターンを保持します。これは 1 次元シンボルよりも 2 次元シンボルで重要です。なぜなら QR デコーダはグリッドをサンプリングし、ぼやけたモジュール境界に寛容でないからです。
  • read_bar_codes()BarCodeResult オブジェクトのイテラブルを返し、result.code_text には制御文字を含むデコードされたペイロードが格納されます。コンソール上では区切り文字は何も表示されません。そのため、次のセクションでは出力結果を信頼せずコードポイントを検査します。

生成されたバーコードの読み取りと検証

デコードされた文字列を出力することで、シンボルが読み取れることは証明できますが、正しいことは証明できません。グループ区切り文字は非表示文字であるため、区切り文字が欠落しているペイロードと正しい区切り文字があるペイロードはターミナル上で見た目が同じです。検証はコードポイントレベルで行う必要があり、これによりテストスイートでのアサートが容易になります。

手順

  1. 保存した PNG を BarCodeReaderDecodeType.GS1QR で読み込む。
  2. デコードされた結果を反復処理する。
  3. 各文字の Unicode コードポイントを調べ、U+001D を探す。
  4. 区切り文字でペイロードを分割し、フィールドを元の入力と比較する。
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 ワークフローでは、スキャンできるバーコードと正しいバーコードは同じではなく、テストスイート内のコードポイントアサーションが、ラベルが生産に入る前に両者を区別する役割を果たします。

よくある質問

  1. encode_gs1_separator_in_byte_mode オプションは何をしますか? このオプションは、QR エンコーダに対して、GS1 グループ区切り文字(ASCII 29)および % 文字を構造マーカーとして扱うのではなく、生のバイトデータとして出力するよう指示します。その結果、これらの文字はバーコードペイロード内でそのまま保持されます。

  2. GS1QR 機能を使用するために特別なライセンスが必要ですか? GS1QR は標準の Aspose.BarCode ライブラリの一部です。ライセンスなしで評価できます。また、評価用の透かしを削除するために、Aspose のウェブサイトから無料の一時ライセンスをリクエストできます。

  3. この機能を他の QR コードタイプで使用できますか? いいえ。このフラグは GS1QR エンコードタイプに適用されます。標準 QR および Micro QR エンコーダはそれを無視します。GS1 アプリケーション識別子の解析はそれらには適用されないためです。

  4. 生成されたバーコード画像はロスレスですか? デフォルトの PNG で保存すると、正確なモジュールパターンを保持したロスレス画像が生成されます。バーコードには JPEG を使用しないでください。圧縮アーティファクトによりモジュールのエッジがぼやけ、読み取り率が低下します。

  5. シーケンサーが正しくエンコードされたことをどのように確認できますか? BarCodeReader を使用して DecodeType.GS1QR で画像を再度読み取り、デコードされた文字列のコードポイントを調べます。ペイロード内の U+001D は、グループ区切り文字がバイトモードでエンコードされたことを確認します。

  6. バイトモードを有効にするとバーコードのサイズに影響がありますか? バイトモードは英数字モードよりも多くのデータビットを必要とすることがあり、シンボルがより大きな QR バージョンに移行する可能性があります。ライブラリは自動的に適合する最小のバージョンを選択するため、増加は通常、最大で1バージョンステップです。

  7. このオプションはどのバージョンの Aspose.BarCode で導入されましたか? encode_gs1_separator_in_byte_mode プロパティは Aspose.BarCode for Python via .NET 26.6 で追加されました。以前のバージョンでは、グループ区切り文字を埋め込むために手動でバイト操作が必要です。

続きを読む