4

ZXing.dll -- .net 2.0 用の zxing.net -- ファイル バージョン 0.14.0.1

私のアプリケーションでは、PDF417 コードの自動サイズ変更 (行/列の計算) が許可されていません。そのため、選択した設定を使用して許可する文字数を決定し、ユーザー入力を制限します。

私の計算に基づいて、有効なはずのパラメーターが与えられた場合、ZXing は PDF417Writer.encode の呼び出しで「メッセージを列に収めることができません」という例外をスローします。

例 #1:

ErrorCorrection=Level3 (16 error codewords)
Compaction=Text (1.9 characters per codeword)
Rows=23, Columns=3 (69 codewords)
Calculated Capacity = 69 - 16 - 1 = 52 * 1.9 = 98.8 (98 characters)
Text = "0123456789ABCDEFGHIJ0123456789ABCDEFGHIJ0123456789ABCDEFGHIJ0123456789ABCDEFGHIJ0123456789ABCDEFGH"
(98 text characters)

これらの設定では、ZXing は 94 文字をエンコードできますが、95 文字以上で失敗します。

例 #2:

ErrorCorrection=Level0 (2 error codewords)
Compaction=Numeric (2.9 characters per codeword)
Rows=3, Columns=2 (6 codewords)
Calculated Capacity = 6 - 2 - 1 = 3 * 2.9 = 8.7 (8 characters)
Text = "123456" (6 numeric characters)

この場合、ZXing は 5 文字までエンコードできますが、6 文字以上で失敗します。

例 #2 を再現する小さなテスト プログラム (C#) を次に示します。

IDictionary<EncodeHintType, object> hints = new Dictionary<EncodeHintType, object>();
hints.Add(EncodeHintType.MARGIN, 0);
hints.Add(EncodeHintType.ERROR_CORRECTION, PDF417ErrorCorrectionLevel.L0);
hints.Add(EncodeHintType.PDF417_COMPACT, false);
hints.Add(EncodeHintType.PDF417_COMPACTION, Compaction.NUMERIC);
hints.Add(EncodeHintType.PDF417_DIMENSIONS, new Dimensions(2, 2, 3, 3));
new PDF417Writer().encode("123456", BarcodeFormat.PDF_417, 0, 0, hints);

次のリソースでは、例 #1 について説明しています。

http://www.currentdirections.com/facts/sizing-applications-for-2d-symbols.html

質問:

  1. ZXing を正しい方法で使用して PDF417 コード データを生成していますか?
  2. PDF417 コードの容量を正しく計算していますか?
4

0 に答える 0