【问题标题】:C# : Generating Code 128 Barcode (width of bars/spaces)C#:生成 Code 128 条码(条/空格的宽度)
【发布时间】:2011-10-25 01:16:32
【问题描述】:

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

我们正在生成 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# 程序员......

【问题讨论】:

标签: c# barcode code128


【解决方案1】:

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

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

【讨论】:

  • 我完全同意你的观点,只是切换到其中之一可能不像切换 DLL 那样容易......
  • 你甚至可以使用这样的库来实现MakeBarcodeImage 方法——这样就不需要更改接口,也不需要更改项目的其他部分...
  • 经过一番搜索,我可以很容易地看到这段代码是基于此:codeproject.com/KB/GDI-plus/GenCode128.aspx 但有一些变化......
  • 在您提供的链接中明确指出它们并不总是符合规范,因为它们不强制执行最小宽度,听起来完全是您的问题...
  • 你是对的...我要尝试迁移到一个新的库...谢谢!
【解决方案2】:

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

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

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

生成的条码至少需要 300dpi,最好是 600dpi,最好是 2540dpi。

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

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

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

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

HTH

【讨论】:

  • 我不得不同意,这是一个糟糕的例程。条形码是二进制的,它应该使用恒定的线宽,二进制代码来自:en.wikipedia.org/wiki/Code_128
  • 感谢您的建议...我可能应该看看一个免费的图书馆并花时间让它工作...
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2012-12-04
    • 2019-04-30
    • 1970-01-01
    • 2015-07-05
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 2013-08-31
    相关资源
    最近更新 更多