所以我继承了这段代码,或者我应该说,有人开发了这个代码并继续前进,现在我们遇到了问题,我正在研究它......
我们正在生成c128条形码,经过认证后,他们发现了一个我无法弄清楚的问题。条/间距的宽度为10.5密耳,可接受的范围为15-21密耳(1密耳= 0.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#程序员...
答案 0 :(得分:15)
这不是一个直接的答案但是我强烈建议使用经过充分测试的库来生成条形码...正确的条形码并不容易,因为有一些陷阱...那里有大量的库一些商业,一些免费...
.NET的2个免费条形码库:
http://barcoderender.codeplex.com/
http://www.codeproject.com/KB/graphics/BarcodeLibrary.aspx
答案 1 :(得分:7)
FWIW,这是一个非常差的条形码生成例程,您应该放弃它并搜索专门编写以生成这些条形码的库。
用于制作位图的设备上下文的分辨率是多少?
从外观上看,您的代码默认使用屏幕设备上下文,即96dpi。
条形码需要至少生成300dpi,最好是600dpi,最好是2540dpi。
在96dpi时,你永远无法达到所提供准确度所需的分辨率。
解决方案1:修改代码以使用高分辨率打印机设备上下文,并以该分辨率制作位图。目前,您的代码只使用任意计算的宽度。
下一个问题是代码使用整数条宽度并转换为浮点数(yikes!)。当处理低dpi(甚至高dpi但不是那么多)时,这会成为一个问题,因为某些条形/空格可能需要2个像素而有些可能需要3个像素,因此最终会得到条形码具有不均匀的条形/间距。
解决方案2:确保所有宽度相同的条/空间宽度相同。
HTH
答案 2 :(得分:2)
如果您不想使用Yahia建议的免费条形码库,我认为增加:settings.InterCharacterGap的值应该可以解决问题。
但是,我认为您应该看看这些库。这样,您将需要维护更少的代码,能够更轻松地调整您的软件,如果需要更改条形码类型,您可以立即支持它,而不是重新发明轮子。