9

所以我继承了这段代码,或者我应该说,有人开发了它并继续前进,现在我们遇到了问题,我正在研究它......

我们正在生成 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

如果我猜的话,我认为这是因为条形的宽度基于条码的高度,而不是条码的高度基于文本和条码的长度。但我对规范不太熟悉(即使在审查之后),而且我充其量只是一个新手 C# 程序员......

4

3 回答 3

15

这不是一个直接的答案,但我强烈建议使用经过良好测试的库来生成条码……获得正确的条码并不容易,因为存在一些陷阱……那里有大量的库,有些是商业的,一些免费的...

.NET 的 2 个免费条形码库:http:
//barcoderender.codeplex.com/
http://www.codeproject.com/KB/graphics/BarcodeLibrary.aspx

于 2011-08-11T14:37:59.437 回答
7

FWIW,这是一个非常糟糕的条形码生成程序,您应该放弃它并搜索专门为生成这些条形码而编写的库。

用于制作位图的设备上下文的分辨率是多少?

从外观上看,您的代码默认使用屏幕设备上下文,即 96dpi。

条形码需要以至少 300dpi 的分辨率生成,最好是 600dpi,最好是 2540dpi。

在 96dpi 下,您永远无法达到给定精度所需的分辨率。

解决方案 1:修改代码以使用高分辨率打印机设备上下文并以该分辨率制作位图。目前您的代码只是使用任意计算的宽度。

下一个问题是代码使用整数条形宽度并转换为浮点数(哎呀!)。这在处理低 dpi(即使是高 dpi,但不是那么多)时成为一个问题,因为一些条形/空格可能占用 2 个像素,而有些可能占用 3 个像素,因此您最终会得到一个条码/空格不均匀的条形码。

解决方案 2:确保所有假定宽度相同的条形/空格的宽度相同。

高温高压

于 2011-08-11T14:50:37.387 回答
2

如果您不想按照 Yahia 的建议使用免费的条形码库,我认为增加:settings.InterCharacterGap 的值应该可以解决问题。

但是,我认为您应该看看这些库。这样,您需要维护的代码更少,能够更轻松地调整您的软件,并且如果需要更改条码类型,您也许可以立即支持它,而不是重新发明轮子。

于 2011-08-11T14:51:25.560 回答