C #: Генерация кода 128 Штрих-код (ширина баров / пробелов) - PullRequest
9 голосов
/ 11 августа 2011

Итак, я унаследовал этот код, или я должен сказать, что кто-то разработал его и пошел дальше, и теперь у нас возникла проблема с ним, и я изучаю его ...

Мы генерируем штрих-коды c128и после их сертификации они заметили проблему, которую я не вижу, чтобы понять.Ширина баров / промежутков составляет 10,5 мил, и их приемлемый диапазон составляет 15-21 мил (1 мил = .001 дюйм).

Код рендеринга основан на этой библиотеке: http://www.codeproject.com/KB/GDI-plus/GenCode128.aspx, но некоторые изменения были изменены ...

Все сгенерированные штрих-коды являются буквенно-цифровыми, без специальных символов.Я думал, что ширина строки + пробел зависит от кодируемого символа.

Вот используемые настройки:

settings.Font = new Font ( FontFamily.GenericSansSerif, 12 );
settings.TopMargin = 10
settings.BottomMargin = 10
settings.LeftMargin = 10
settings.RightMargin = 10
settings.BarCodeHeight = 80
settings.DrawText = true
settings.BarCodeToTextGapHeight = 10
settings.InterCharacterGap = 2

Если я угадал, я думаю, это потому, что ширинаполосок основывается на высоте штрих-кода вместо высоты штрих-кода, основанного на длине текста и штрих-кода.Но я не слишком знаком со спецификацией (даже после ее просмотра), и я в лучшем случае начинающий программист C # ...

Ответы [ 3 ]

15 голосов
/ 11 августа 2011

Это не прямой ответ, НО я настоятельно рекомендую использовать хорошо проверенную библиотеку для генерации штрих-кодов ... правильно получить штрих-коды не так просто, так как есть некоторые подводные камни ... существует множество библиотек некоторые коммерческие, некоторые бесплатные ...

2 бесплатных библиотеки штрих-кодов для .NET:
http://barcoderender.codeplex.com/
http://www.codeproject.com/KB/graphics/BarcodeLibrary.aspx

7 голосов
/ 11 августа 2011

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

Какое разрешение контекста устройства используется для созданиярастровое изображение?

Судя по всему, ваш код использует контекст устройства экрана по умолчанию, который составляет 96 точек на дюйм.

Штрих-коды должны генерироваться с минимальным разрешением 300 точек на дюйм, предпочтительно 600 точек на дюйм ив идеале 2540 точек на дюйм.

При разрешении 96 точек на дюйм вы никогда не достигнете разрешения, необходимого для заданной точности.

Решение 1: Измените код, чтобы использовать контекст устройства принтера с высоким разрешением, и сделайте растровое изображение при этомразрешающая способность.В настоящее время ваш код просто использует произвольно вычисленную ширину.

Следующая проблема состоит в том, что код использует целочисленную ширину полосы и приводит к плавающей запятой (yikes!).Это становится проблемой при работе с низким dpi (даже с высоким dpi, но не так сильно), так как некоторые штрихи / пробелы могут занимать 2 пикселя, а некоторые - 3, поэтому в итоге вы получите штрих-код с неравными барами / пробелами.

Решение 2. Убедитесь, что все столбцы / пробелы, которые должны быть одинаковой ширины, имеют одинаковую ширину.

HTH

2 голосов
/ 11 августа 2011

Если вы не хотите использовать бесплатную библиотеку штрих-кодов, как предложено Yahia, я думаю, что увеличение значения: settings.InterCharacterGap должно помочь.

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

...