Итак, я унаследовал этот код, или, лучше сказать, кто-то разработал его и пошел дальше, и теперь у нас с ним проблема, и я его изучаю...
Мы генерируем штрих-коды c128, и после их сертификации они заметили проблему, которую я не могу понять. Ширина штрихов/промежутков составляет 10,5 мил, а допустимый диапазон составляет 15-21 мил (1 мил = 0,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
Если бы я угадал, я думаю, это потому, что ширина полос основана на высоте штрих-кода, а не высота штрих-кода на основе длины текста и штрих-кода. Но я не слишком знаком со спецификацией (даже после ее просмотра), и я в лучшем случае начинающий программист на С#...
Ответ 1 · рейтинг 15 · Yahia
Это не прямой ответ, НО я настоятельно рекомендую использовать хорошо протестированную библиотеку для генерации штрих-кодов... получить правильные штрих-коды непросто, так как есть некоторые подводные камни... существует множество библиотек, некоторые коммерческие, немного бесплатно...
2 бесплатные библиотеки штрих-кодов для .NET:
http://barcoderender.codeplex.com/
http://www.codeproject.com/KB/graphics/BarcodeLibrary.aspx а>
Ответ 2 · рейтинг 7 · TheBarcodeMan
FWIW, это чрезвычайно плохая процедура генерации штрих-кодов, и вам следует отказаться от нее и искать библиотеку, которая была специально написана для генерации этих штрих-кодов.
Какое разрешение контекста устройства используется для создания растрового изображения?
Судя по всему, ваш код по умолчанию использует контекст экранного устройства, что составляет 96 точек на дюйм.
Штрих-коды должны создаваться с разрешением не менее 300 dpi, предпочтительно 600 dpi и в идеале 2540 dpi.
При разрешении 96 dpi вы никогда не достигнете разрешения, необходимого для данной точности.
Решение 1. Измените код, чтобы использовать контекст устройства принтера с высоким разрешением, и создайте растровое изображение с этим разрешением. В настоящее время ваш код просто использует произвольно вычисленную ширину.
Следующая проблема заключается в том, что в коде используется целочисленная ширина полосы и выполняется приведение к типу с плавающей запятой (ура!). Это становится проблемой при работе с низким dpi (даже с высоким dpi, но не настолько), поскольку некоторые полосы/пробелы могут занимать 2 пикселя, а некоторые могут занимать 3, поэтому в итоге вы получите штрих-код с неровными полосами/пробелами.
Решение 2. Убедитесь, что все полосы/пробелы, которые должны иметь одинаковую ширину, имеют одинаковую ширину.
ХТН
Ответ 3 · рейтинг 2 · Martin
Если вы не хотите использовать бесплатную библиотеку штрих-кодов, как предложил Yahia, я думаю, что увеличение значения: settings.InterCharacterGap должно помочь.
Тем не менее, я думаю, вам следует взглянуть на эти библиотеки. Таким образом, у вас будет меньше кода для поддержки, вы сможете легче адаптировать свое программное обеспечение, а если тип штрих-кодов потребует изменений, вы сможете поддерживать его сразу, вместо того, чтобы заново изобретать колесо.