Проблема сопоставления штрих-кодов Code128A, сгенерированных с помощью iTextSharp и Barcode.4NET - PullRequest
3 голосов
/ 17 ноября 2008

Прежде всего, я немного знаком с форматами штрих-кодов, и то, что я знаю, я узнал из Википедии.

У нас есть несколько штрих-кодов, сгенерированных существующим приложением, которое использует библиотеку Barcode.4NET. Штрих-код в формате кода 128А. Код для их генерации довольно прост и выглядит примерно так:

// Create the barcode
Code128ABarcode c128A = new Code128ABarcode("045746201627080857");

Никаких других параметров для него не задано - после настройки данных мы просто получаем GIF-версию штрих-кода из библиотеки.

Я работаю над новым приложением, которое использует iTextSharp для генерации PDF, и я решил, что вместо двух библиотек я бы использовал библиотеку генерирования штрих-кодов iTextSharp, поскольку она поддерживает штрих-коды Code128. Он имеет несколько различных вариантов кода 128, но ни один из них не является «кодом 128А».

Вот как выглядит код:

Barcode128 code128 = new Barcode128();
code128.CodeType = Barcode.CODE128;
code128.ChecksumText = true;
code128.GenerateChecksum = true;
code128.StartStopText = true;
code128.Code = "045746201627080857";

На изображении ниже показано лучшее, что я когда-либо достиг.

alt text

Изображение сверху генерируется iTextSharp, а изображение внизу - Barcode4Net. Очевидно, что они не одинаковы (и не только по размеру и шрифту - данные со штрих-кодом довольно разные).

Кто-нибудь достаточно знаком с компонентами штрих-кода iTextSharp (или самого iText) или со штрих-кодами Code 128A, чтобы рассказать мне, как заставить iTextSharp выглядеть точно так же, как Barcode.4NET?

Ответы [ 3 ]

3 голосов
/ 17 ноября 2008

Неужели им нужно выглядеть точно так же? Различные версии кода 128 способны кодировать числа, даже если сами штрих-коды выглядят совершенно по-разному; в конце читатель должен разобраться со всем этим.

Я предпочитаю вариант B, потому что он содержит строчные буквы в дополнение к верхнему. Вы можете увидеть таблицу, детализирующую различия в http://www.barcodeisland.com/code128.phtml

iTextSharp, похоже, генерирует вариант C, который является наиболее компактным, если текст состоит только из десятичных цифр. Он кодирует 2 цифры в том же количестве пробела, что и один символ в других кодировках.

3 голосов
/ 17 ноября 2008

номер должен быть:

*045746201627080857*

вам нужно добавить звездочку к началу и концу, чтобы можно было прочитать штрих-код, вам нужно проверить в документации по компоненту, кому нужны эти символы.

сканер нуждается в ведущей и задней звездочке для этого типа BC.

для того, что я вижу в вашем коде, строка

code128.StartStopText = true;

автоматически добавляет его, попробуйте установить для этого свойства значение false, в результате вы получите тот же штрих-код. В первом коде вы должны использовать

Code128ABarcode c128A = new Code128ABarcode("*045746201627080857*");

попробуй себя:)

Отредактировано:

Правильный штрих-код:

альтернативный текст http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=1

по ссылке ниже (используя бесплатный сервис ID Automation ):

http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=1

что у вас есть:

альтернативный текст http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=3

и это Code128C вместо Code128A , поскольку вы можете проверить ссылку (я изменил свойства штрих-кода на Code128C)

http://www.bcgen.com/demo/linear-dbgs.aspx?D=045746201627080857&S=13&CS=3

1 голос
/ 17 ноября 2008

Хотя я думаю, что в balexandre смешались генераторы, его совет хорош.

Очевидно, что Barcode.4NET правильно генерирует штрих-код Code 128A, который я пытаюсь эмулировать.

iTextSharp генерирует штрих-код Code 128C, который, по мнению Марка Рэнсома, должен быть в порядке, за исключением того, что пользователи и покупатели, вероятно, посмотрят на него и скажут: «Он слишком короткий и должен выглядеть как другие!»

Итак, отличный совет, но я все еще вернусь к вопросу «Как сгенерировать штрих-код Code 128A с помощью iTextSharp?»

...