生成条形码的解决方案
添加时间:2019-11-02 00:43:17
来源:
我们目前的解决方案是用 .Net winform 开发的一个小程序,输入数据,然后操作 Excel ,将数据填充到 Excel 中去,然后直接通过程序打印 Excel。其中的条形码使用的是 Code 39 字体生成的,即 Sakura CD39 字体。条形码的内容也很简单,由数字"1234567890"和连字符"-"组成,所以用 Code 39 一直没有问题。
现在,我们有国外的业务,需要产生一种新的条形码: ]C11040000149:21003:30200
这个条形码里面有中括号 "]" 和 冒号":" 还有字母 "C"
我们尝试了以前的方法,都不能实现。
1.最初想使用Code 39 ,但是它不能解析中括号 “]”,即不能对中括号进行编码
2.到网上下载Code 128 ,code 128 好像可以解析上面的字符串,但是一直没有找到免费的。
3.使用Excel 中的控件Microsoft Barcode Control 9.0。因为我们是通过Excel 打印条形码标签的,所以想通过这个来实现。最初是真的可以了,通过设置,他可以解析上面的字符串,但是同时产生了一个新的问题:打印的条形码标签的内容始终不变,始终显示最开始的数据,也就是说如果你想打印修改后的条形码数据,就得将Excel 关闭,重新打开Excel 后才可以打印新的数据,所以这个一直没有得到解决。
4.想使用水晶报表,但是没有使用过,也不知道能不能产生条形码。
应该从Microsoft Barcode Control 9.0突破,Microsoft Barcode Control绑定数据了吗?不应该用赋值,应该用绑定。
CODE128码是可以解决的,要用算法算出首尾加进的特殊字符
装上CODE128字体就可以了
如果是想用使用Excel 中的控件Microsoft Barcode Control 9.0,我个人也没有用过,帮不了楼主,我使用的是专业的条码打印软件BarTender 7.10 。我想操作Excel 去打印并不方便。
直接使用Code128码 ]C11040000149:21003:30200 虽然条形码可显示打印,但扫描枪是无法识别
算出来是下面这样
Ì]C11040000149:21003:30200eÎ
个人感觉用这个软件比较好,但不会配置
我直接用的bartender连接printer的
如果知道128码的编码规则那就自己写条码组件。
这是基类代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | Imports System.Drawing Imports System.Windows.Forms Imports System.Text.RegularExpressions Imports System.Drawing.Imaging Public MustInherit Class Barcode Inherits Control Private m_BarCode As String '输入值 Private m_LineWidth As Integer '基准线宽度 '临时中间变量 Private m_DisPlayFont As Boolean '是否显示条码数字 Private m_Image As Image Public Overridable Property LineWidth() As Integer Get Return m_LineWidth End Get Set ( ByVal value As Integer ) If value > 0 AndAlso value <= 6 Then m_LineWidth = value End If End Set End Property Protected Function Check( ByVal Inptut As String ) As Boolean '判断输入值是否符合规范 Return Regex.IsMatch(m_BarCode, Inptut) '只能输入12或者13位数字 End Function Public Overridable Property Value() As String Set ( ByVal value As String ) m_BarCode = value Me .Invalidate() '设置值完毕后触发绘画事件 End Set Get Return m_BarCode End Get End Property Public Overridable ReadOnly Property BarCode() As String '返回条码数字 Get Return String .Empty End Get End Property Public Property DisPlayFont() As Boolean Get Return m_DisPlayFont End Get Set ( ByVal value As Boolean ) m_DisPlayFont = value Me .Invalidate() End Set End Property Public ReadOnly Property Image() As Image Get SavePic() Return m_Image m_Image.Dispose() End Get End Property Public Sub New () m_LineWidth = 1 m_DisPlayFont = True Me .Height = 85 End Sub Protected Overridable Sub DrawPic( ByVal Graphic As Graphics) End Sub Protected Overridable Sub DrawText( ByVal Graphic As Graphics) End Sub Private Sub SavePic() '生成图象以供打印 m_Image = New Bitmap( Me .Width, Me .Height, PixelFormat.Format32bppArgb) Dim Graphic As Graphics = Graphics.FromImage(m_Image) Graphic.Clear(Color.White) DrawPic(Graphic) DrawText(Graphic) End Sub End Class |
这是EAN13码的具体实现
打印的条形码标签的内容始终不变,始终显示最开始的数据,也就是说如果你想打印修改后的条形码数据,就得将Excel 关闭,重新打开Excel 后才可以打印新的数据,所以这个一直没有得到解决
让设定的控件值生效即可,很简单的.
使用了 excel 中的 vba 代码实现了。
那个 barcode 控件很搞笑,要在重新给新值时用 vba 代码改变一下 barcode控件的大小就可以使用新值生效了。如下面的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
BarCodeCtrl1.Value = "]C110" & Cells(5, 5) & ":21" & Cells(12, 19) & ":30" & Cells(12, 18)
BarCodeCtrl1.Height = 41
BarCodeCtrl1.Width = 520
BarCodeCtrl1.Refresh
'改变height 或width值,打印结果才正确
BarCodeCtrl1.Value = "]C110" & Cells(5, 5) & ":21" & Cells(12, 19) & ":30" & Cells(12, 18)
BarCodeCtrl1.Height = 41.25
BarCodeCtrl1.Width = 523.6
BarCodeCtrl1.Refresh
'Sheet2.PrintOut
End Sub
2019-11
我们目前的解决方案是用.Netwinform开发的一个小程序,输入数据,然后操作Excel,将数据填充到Excel中去,然后直接通过程序打印Excel。其中的条形码使用的是Code39字体生成的,即SakuraCD39字体。条形码的内容也很简单,由数字1234567890和连字符… [了解更多]
2019-11
我们目前的解决方案是用.Netwinform开发的一个小程序,输入数据,然后操作Excel,将数据填充到Excel中去,然后直接通过程序打印Excel。其中的条形码使用的是Code39字体生成的,即SakuraCD39字体。条形码的内容也很简单,由数字1234567890和连字符… [了解更多]
地 址:中国(上海)自由贸易试验区临港新片区平港路883-885号1幢
邮政编码:201411
电 话:13761963296
邮 箱:847098433@qq.com
投诉邮 箱:info@xtvu.com