C#: генерация кода 128 штрих-кода (ширина баров / пробелов)
Итак, я унаследовал этот код, или я должен сказать, кто-то разработал это и двинулся дальше, и теперь у нас проблема с ним, и я изучаю его...
мы генерируем штрих-коды c128, и после их сертификации они заметили проблему, которую я не вижу, чтобы выяснить. Ширина баров / космосов 10.5 mils и они приемлемый ряд 15-21 mils (1 mil = .001 дюйма).
код рендеринга основан на этой библиотеке: http://www.codeproject.com/KB/GDI-plus/GenCode128.aspx но был изменен некоторые...
генерируемые штрих-коды являются Альфа-цифровыми, без специальных символов. Я думал, что ширина bar + space зависит от кодируемого символа.
вот используемые настройки:
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 ответов
Это не прямой ответ, но я настоятельно рекомендую использовать хорошо протестированную библиотеку для генерации штрих-кодов... получение штрих-кодов право не легко, так как есть некоторые подводные камни... есть тонны библиотек, некоторые коммерческие, некоторые бесплатные...
2 бесплатные библиотеки штрих-кодов для .NET:
http://barcoderender.codeplex.com/
http://www.codeproject.com/KB/graphics/BarcodeLibrary.aspx
FWIW, это чрезвычайно плохая процедура генерации штрих-кода, и вы должны отказаться от нее и искать библиотеку, которая была специально написана для генерации этих штрих-кодов.
каково разрешение контекста устройства, используемого для создания растрового изображения?
судя по всему, ваш код по умолчанию использует контекст устройства экрана, который составляет 96dpi.
штрих-коды должны быть сгенерированы как минимум 300dpi, предпочтительно 600dpi и идеально 2540dpi.
на 96dpi вы никогда не достигнете разрешения, необходимого для данной точности.
Решение 1: измените код, чтобы использовать контекст устройства принтера с высоким разрешением и сделать растровое изображение с этим разрешением. В настоящее время ваш код просто использует произвольно вычисленную ширину.
следующая проблема заключается в том, что код использует целочисленную ширину бара и приводит к float (yikes!). Это становится проблемой при работе с низким dpi (даже с высоким dpi, но не так сильно), как некоторые бары/пробелы могут занимать 2 пикселя, а некоторые-3, поэтому вы получаете штрих-код с неравномерными барами / пробелами.
решение 2: Убедитесь, что все бары/пробелы, которые должны иметь одинаковую ширину, имеют одинаковую ширину.
HTH
Если вы не хотите использовать бесплатную библиотеку штрих-кодов, как предложил Яхиа, я думаю, что увеличение значения:настройки.InterCharacterGap должен сделать трюк.
, Я думаю, вы должны взглянуть на эти библиотеки. Таким образом, у вас будет меньше кода для обслуживания, вы сможете легче адаптировать свое программное обеспечение, и если тип штрих-кодов требует изменений, вы можете сразу же поддержать его вместо повторного изобретения колеса.