一维条码生成并打印到单元格

abc_2017 2017-05-29 07:15:51
各位高手:请问:
如何生成一维条码,扫码枪可识别,并且能在EXCEL单元格中打印
...全文
633 34 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2017-06-01
  • 打赏
  • 举报
回复
我在4楼说的那种方案,目前证实是可行的了。 以前“不能扫码”并不是方案错误,而是那些字体文件有问题。 在23楼, chewinggum(脆皮大雪糕)提供的下载网址,我昨天下载来试了一下,是可行的。 需要注意的是,要“扫码”,要在原来的文本内容前、后各加1个*字符。 其实这种方案最好:  1. 简单、便于控制(版面、格式等);  2. 成本低(内容直接就在文档中,文本内容占用空间极小,不需要额外的图片文件)。 只要有“正确的字体”文件就行了,23楼的那个ttf文件,才21.2KB。
舉杯邀明月 2017-06-01
  • 打赏
  • 举报
回复
引用 22 楼 abc_2017 的回复:
1.39条码字体: http://www.pc6.com/softview/SoftView_132619.html ,不识别"*",手机不能扫描。
2.cia code39字体:http://www.ps123.net/photoshop/HTML/6281.html ,我找到的都是CIA Code 39 Medium Text,,但这种字体下面有显示,能去掉吗?
3.我是想把条码打印到单元格中,保存图片,什么也没存上。
Option Explicit
Private Declare Function PrintWindow Lib "user32" (ByVal hWnd As Long, ByVal hdcBlt As Long, ByVal nFlags As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Private Sub Command1_Click()
Dim a
a = PrintWindow(395116, Picture1.hDC, 0)
BitBlt Picture2.hDC, 0, 0, 7488, 1300, Picture1.hDC, 0, 0, vbSrcCopy
SavePicture Picture2.Image, "c:\aaa.bmp"
End Sub

Private Sub Form_Load()
BarCodeCtrl1.Style = 6
BarCodeCtrl1.Value = "2017042802030005"
End Sub


麻烦各位高手帮忙,我想解决的问题是,把39码打印到报表的单元格中,或者保存为图片,并且手机可以扫码。


我试了一下,用BitBlt + SavePicture 是可行的!
Option Explicit

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, _
ByVal x As Long, ByVal y As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, _
ByVal hSrcDC As Long, _
ByVal xSrc As Long, _
ByVal ySrc As Long, ByVal dwRop As Long) As Long

Private Sub Command1_Click()
BitBlt Picture2.hDC, 0, 0, 500, 96, Picture1.hDC, 0, 0, vbSrcCopy
SavePicture Picture2.Image, "E:\Temp\aaa.bmp"
End Sub

Private Sub Form_Load()
BarCodeCtrl1.Style = 6
BarCodeCtrl1.Value = "2017042802030005"
Picture2.AutoRedraw = True ' 重点是这句 !
End Sub

我已经给你说过了,BitBlt用的单位是“像素”,你传给它的宽、高怎么还用几千的值!
不懂什么叫“像素”吗? (当然这也不是你的代码保存的图片“没有条码”的根本原因)
关键是,要把Picture2的 AutoRedraw属性设置为 True 。
 另外,Picture2可以隐藏,不影响结果。

of123 2017-06-01
  • 打赏
  • 举报
回复
字体库方案的确比控件方案更灵活。
abc_2017 2017-06-01
  • 打赏
  • 举报
回复
感谢各位高手
舉杯邀明月 2017-06-01
  • 打赏
  • 举报
回复
引用 32 楼 chewinggum 的回复:
其实标准的条码应该要有数字,应对万一扫描不出来的情况允许人工识别手工输入(超市里面经常有条码扫不出来,收银大姐怒而击键输入的场景)。这一点我很不满意我在23楼发的那个字体,只不过你找到的没法用那也没辙。
这个其实滩解决: 如果是程序界面上,自己添加一个Label、TextBox来显示数据很容易; 如果是在文档中(比如Excel表格),增加一列显示“数据”就行了。 如果要打印出来,同样在“打印单”上找个合适的位置打印文本就行了。 因为实质上都是相同的文本,只需要换一下字体,这个“条码”就变成明文的文本了。   最多是需要处理一下,把首尾的星号去掉(其实不去掉也没多大关系)。
脆皮大雪糕 2017-06-01
  • 打赏
  • 举报
回复
其实标准的条码应该要有数字,应对万一扫描不出来的情况允许人工识别手工输入(超市里面经常有条码扫不出来,收银大姐怒而击键输入的场景)。这一点我很不满意我在23楼发的那个字体,只不过你找到的没法用那也没辙。
舉杯邀明月 2017-06-01
  • 打赏
  • 举报
回复
引用 29 楼 abc_2017 的回复:
麻烦各位高手,39条码下面不想有数字,用哪种字体,可以两边加 * 的字体,可以扫码的,麻烦发一下网址。
给你说了,23楼的那个链接,下载的字体就可以用 !!!!! 自己不好好看下回复!!!
舉杯邀明月 2017-06-01
  • 打赏
  • 举报
回复
引用 29 楼 abc_2017 的回复:
麻烦各位高手,39条码下面不想有数字,用哪种字体,可以两边加 * 的字体,可以扫码的,麻烦发一下网址。
笨蛋………… Picture1.AutoRedraw 必须是 False !!!!! 那个控件的条码,默认设置是有数字(显示数据)的, 你可以把 BarCodeCtrl控件的ShowData属性赋值为0,这样它就不会显示数据了。 也可以计算好“区域”的大小,在BitBlt时把数据显示的地方排除掉。
abc_2017 2017-06-01
  • 打赏
  • 举报
回复
麻烦各位高手,39条码下面不想有数字,用哪种字体,可以两边加 * 的字体,可以扫码的,麻烦发一下网址。
abc_2017 2017-06-01
  • 打赏
  • 举报
回复
Option Explicit
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Private Sub Command1_Click()
BitBlt Picture2.hDC, 0, 0, 500, 96, Picture1.hDC, 0, 0, vbSrcCopy
SavePicture Picture2.Image, "e:\aaa.bmp"
End Sub

Private Sub Form_Load()

BarCodeCtrl1.Style = 6
BarCodeCtrl1.Value = "2017042802030005"

Picture1.AutoRedraw = True
Picture2.AutoRedraw = True
End Sub

我照你的写了,保存的图片也是个方框,没有二维码 ,我原来是在控件属性设置的,picture1和picture2的AutoRedraw = True,为什么不行呢
舉杯邀明月 2017-05-31
  • 打赏
  • 举报
回复
引用 23 楼 chewinggum 的回复:
[quote=引用 21 楼 Chen8013 的回复:] [quote=引用 18 楼 chewinggum 的回复:] 记事本里我这也完全正常啊 就是去网上下载的code39字体
刚才又百度了一下,找到的Code39字体,似乎还是跟我以前下载的那个文件一模一样的。 可不可以把你的这个字体共享一下?或者把你下载的网站地址发出来? [/quote] http://www.dyjqd.com/soft/CODE39.html[/quote] 谢谢! 下载下来乱试了两三个,扫描结果正确。 
脆皮大雪糕 2017-05-31
  • 打赏
  • 举报
回复
引用 21 楼 Chen8013 的回复:
[quote=引用 18 楼 chewinggum 的回复:] 记事本里我这也完全正常啊 就是去网上下载的code39字体
刚才又百度了一下,找到的Code39字体,似乎还是跟我以前下载的那个文件一模一样的。 可不可以把你的这个字体共享一下?或者把你下载的网站地址发出来? [/quote] http://www.dyjqd.com/soft/CODE39.html
赵4老师 2017-05-31
  • 打赏
  • 举报
回复
用字体编辑软件编辑一下Code39.ttf ?
舉杯邀明月 2017-05-31
  • 打赏
  • 举报
回复
估计应该用 BitBlt( ) 把相应区域的图像拷贝到另一个PictureBox上,再保存其 Image属性图像数据才行。 要注意一下:“目标PicutreBox” 隐藏/可见,Autoredraw属性 = True/False 可能会造成操作细节上的差异。 另外要注意: 1. 这个API函数的度量单位是像素;“句柄”是 hDC而不是 hWnd 。 2. 通过 BitBlt( ) 从“显示”上拷贝图像,操作时你要拷贝的区域必须完全“可见”才行;   如果超出屏幕区域那么超出的部分会是一片黑;如果被别的窗口/对象遮挡拷贝下来的图像也是“被遮挡”的。 3. VB6的 SavePicture() 保存的图片文件只会是BMP格式,即使你给它的扩展名是jpg,它也不会给你转成jpg编码。 其实最可靠的方法,是用GDI方式“自己画条码”,用GDI+的函数接口方法来保存图片文件。 39码的条码规则很简单的,并没有什么难度。
abc_2017 2017-05-31
  • 打赏
  • 举报
回复
1.39条码字体: http://www.pc6.com/softview/SoftView_132619.html ,不识别"*",手机不能扫描。
2.cia code39字体:http://www.ps123.net/photoshop/HTML/6281.html ,我找到的都是CIA Code 39 Medium Text,,但这种字体下面有显示,能去掉吗?
3.我是想把条码打印到单元格中,保存图片,什么也没存上。
Option Explicit
Private Declare Function PrintWindow Lib "user32" (ByVal hWnd As Long, ByVal hdcBlt As Long, ByVal nFlags As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Private Sub Command1_Click()
Dim a
a = PrintWindow(395116, Picture1.hDC, 0)
BitBlt Picture2.hDC, 0, 0, 7488, 1300, Picture1.hDC, 0, 0, vbSrcCopy
SavePicture Picture2.Image, "c:\aaa.bmp"
End Sub

Private Sub Form_Load()
BarCodeCtrl1.Style = 6
BarCodeCtrl1.Value = "2017042802030005"
End Sub


麻烦各位高手帮忙,我想解决的问题是,把39码打印到报表的单元格中,或者保存为图片,并且手机可以扫码。
舉杯邀明月 2017-05-31
  • 打赏
  • 举报
回复
引用 18 楼 chewinggum 的回复:
记事本里我这也完全正常啊 就是去网上下载的code39字体
刚才又百度了一下,找到的Code39字体,似乎还是跟我以前下载的那个文件一模一样的。 可不可以把你的这个字体共享一下?或者把你下载的网站地址发出来?
abc_2017 2017-05-31
  • 打赏
  • 举报
回复
请教各位高手: 我用VB的控件做一维条码,为什么保存为图片是空的。 Private Sub Command1_Click() BarCodeCtrl1.Style = 6 BarCodeCtrl1.Value = "2017042802030005" SavePicture Picture1.image, "d:\1.jpg" End Sub BarCodeCtrl1控件,我放到Picture1控件里了,但条码不能保存到图片里,怎么才能保存呢?
舉杯邀明月 2017-05-31
  • 打赏
  • 举报
回复
还有,照我刚才“人工分析”的结果来看,字符后面留一个“空隙”是正确的,并不会造成“误码”。 我之前还以为这个条码是“连续不断”的排列黑白条呢。
舉杯邀明月 2017-05-31
  • 打赏
  • 举报
回复
我在网上下载的“Code39”,它没有*这个字符的条码;并且字符没有留“间隙”。


然后今天下载了一个zdingyun在13楼说的“CIA Code 39 Text”字体,刚才跟你在15楼贴的图片比较了一下:
它的“条码”编码都是错的。
我输入的是“*TEST*”,扫描出来的结果,老是“AASA”。
我自己分析了一下它的编码,确定是这样的:字体文件的字符不正确!
下图中两个条码,上面那个是你在15楼贴出来的,下面那个是我今天下载的字体的。
可以看到:它的T和E的“编码”都是一样,并且是“张冠李戴”的弄成了字符A的编码去了!
脆皮大雪糕 2017-05-31
  • 打赏
  • 举报
回复


记事本里我这也完全正常啊
就是去网上下载的code39字体
加载更多回复(14)

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧