Foxtable(狐表)用户栏目专家坐堂 → [求助]条码打印求助


  共有2416人关注过本帖树形打印复制链接

主题:[求助]条码打印求助

帅哥哟,离线,有人找我吗?
jygyyl
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
[求助]条码打印求助  发帖心情 Post By:2021/9/19 17:51:00 [只看该作者]

下面代码能够实现条形码和二维码双码打印(二维码手机识别感觉要比条形码快一点)。问题:
1、不能打印所有行或指定范围(添加二维码打印代码后出现的问题);
2、如何设定字号或设定在单元内缩小填充?
3、二维码如何绑定到指定单元格内?
求老师指点!谢谢!


Dim c1,c2 As WinForm.ComboBox
Dim t1,t2,t3,t4 As WinForm.TextBox
Dim t11,t21,t31,t41 As Integer
Dim Ch1 As WinForm.CheckBox
Ch1= e.Form.Controls("CheckBox1")
c1 = e.Form.Controls("ComboBox1")
c2 = e.Form.Controls("ComboBox2")
t1 = e.Form.Controls("TextBox1")
t2 = e.Form.Controls("TextBox2")
t3 = e.Form.Controls("TextBox3")
t4 = e.Form.Controls("TextBox4")
t11 = t1.Value
t21 = t2.Value
t31 = t3.Value
t41 = t4.Value
Dim c11 As BarCodeEnum
Select Case c1.Value
    Case "Codabar"
        c11= BarCodeEnum.Codabar
    Case "Code128"
        c11= BarCodeEnum.Code128
    Case "Code39"
        c11= BarCodeEnum.Code39
    Case "Code93"
        c11= BarCodeEnum.Code93
    Case "CodeI2of5"
        c11= BarCodeEnum.CodeI2of5
    Case "Ean13"
        c11= BarCodeEnum.Ean13
End Select
Dim c21 As BarDirectionEnum
Select Case c2.Value
    Case "Normal"
        c21= BarDirectionEnum.Normal
    Case "Down"
        c21= BarDirectionEnum.Down
    Case "Up"
        c21= BarDirectionEnum.Up
End Select
If t11 = 0 OrElse t21= 0 Then
    '筛选后全部选定区域
    With CurrentTable
        .Select(0,0, .Rows.Count - 1, .Cols.Count - 1)
    End With
Else
    With CurrentTable
        .Select(t11-1,0, t21-1, .Cols.Count - 1)
    End With
End If
Dim doc As New PrintDoc '定义一个报表
Dim tbl As Table = CurrentTable
'Doc.Columns.Add() '增加第一栏
'Doc.Columns.Add() '增加第二栏 '第一栏的宽度为60毫米
'Doc.Columns(0).Spacing = 20 '栏间距1毫米
For i As Integer = tbl.TopRow To tbl.BottomRow
    Dim rw As Row = tbl.Rows(i)
    Dim rt As New prt.RenderTable() '定义一个表格对象
    Dim rx As New prt.RenderText '定义一个文本对象
    Dim ra As New prt.RenderArea '定义一个容器
    'ra.Width = "Parent.Width"
    ra.width=50
    ra.height=30
    ra.CanSplitHorz = False '禁止水平分割
    ra.CanSplitVert = False '禁止容器因为分页而被垂直分割
    rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center '水平居中
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center '内容垂直居中
    doc.PageSetting.Landscape = True  '横向打印
    Doc.PageSetting.PaperKind = 0
    Doc.PageSetting.LeftMargin = 2 '设置左边距
    Doc.PageSetting.RightMargin = 2  '设置右边距
    Doc.PageSetting.TopMargin = 2  '设置上边距
    Doc.PageSetting.BottomMargin = 2  '设置下边距
    '指定行数?列数?列宽?行高
    rt.Rows.Count = 3 '设置总行数
    rt.Cols.Count = 2 '设置总列数
    rt.Height = 26 '设置表格的高度
    '    rt.Width = "Parent.Width" '设置表格的宽度
    rt.Cols(0).Width = 20  '第一列的宽度
    rt.Cols(1).Width = 15  '第二列的宽度
    'rt.Cols(2).Width = 12
    rt.Rows(1).Height = 10 '第二行的高度(用于显示条码)
    '设置合并单元格
    rt.Cells(0,2).SpanRows = 3 '第1行第5个单元格向下合并3行(用于显示照片)
    rt.Cells(1,0).SpanCols = 2 '向右合并2列
    rt.Cells(2,0).SpanCols = 2  '向右合并2列
    '设置表格样式
    rt.CellStyle.Spacing.All = 1 '单元格内容缩进1毫米
    rt.Style.Spacing.Bottom = 2 '和下一个出入证的距离是8毫米
    ' rt.Style.GridLines.All = New prt.Linedef '设置网格线
    '下面很简单,指定每一个单元格的内容
    rt.Cells(0,0).Text= rw("机构") '"部门"
    rt.Cells(0,1).Text = rw("Name") '"姓名"
    rt.Cells(2,0).Text=  rw("条码") '"编号"
    Dim rbc As New prt.RenderBarCode()
    rbc.Width = t31
    rbc.Height = t41
    rbc.BarCodeType = c11
    rbc.BarDirection = c21
    rbc.Text = rw("条码")
    
    If Ch1.Checked = True Then
        rbc.ShowText = True   '是否显示编码
    Else
        rbc.ShowText = False
    End If
    rt.cells(1,0).RenderObject = rbc
    ra.Children.Add(rt) '加入到容器中
    
    Dim img As prt.RenderImage
    Dim Bar As New BarCodeBuilder
    Bar.Symbology = Barpro.Symbology.QRCode
    Bar.BarRatio = 0.3
    Bar.BarWidth = 15
    Bar.BarHeight = 15
    bar.Code =  rw("条码")
    img = new prt.RenderImage
    img.Image =  bar.GetImage
    img.Width = 15
    img.height= 15
    'img.Style.Spacing.All = 0.25
    img.X=33
    img.Y=5
    ra.Children.Add(img)
    Doc.Body.ChildRen.Add(ra) '将容器加入到报表中
Next
Doc.PrinterName = "ZDesigner GK888t"
Doc.print

'Doc.Preview()
[此贴子已经被作者于2021/9/19 18:04:02编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105959 积分:538870 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/22 8:55:00 [只看该作者]

1、3:和条形码的用法一样的,
条形码的:
rt.cells(1,0).RenderObject = rbc
二维码的也同样发放添加到表格里:
……其它生成二维码的代码
rt.cells(xx行,xx列).RenderObject = img

2、指定图片大小即可
    rbc.Width = t31
    rbc.Height = t41

 回到顶部
帅哥哟,离线,有人找我吗?
jygyyl
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
[求助]打印代码问题  发帖心情 Post By:2021/9/26 10:26:00 [只看该作者]

If t11 = 0 OrElse t21= 0 Then    '筛选后全部选定区域
    With CurrentTable
        .Select(0,0, .Rows.Count - 1, .Cols.Count - 1)
    End With
Else
    With CurrentTable
        .Select(t11-1,0, .t21-1,  .Cols.Count - 1)
    End With
End If

不能打印所有行或指定范围
[此贴子已经被作者于2021/9/26 10:27:34编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105959 积分:538870 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/26 10:48:00 [只看该作者]

单独到命令窗口调用这个代码,表格是否选中了需要的行?
[此贴子已经被作者于2021/9/26 10:48:27编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
jygyyl
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
回复:(有点蓝)单独到命令窗口调用这个代码,表格是...  发帖心情 Post By:2021/9/26 11:04:00 [只看该作者]

可以,但是只打印第一行

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105959 积分:538870 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/26 11:08:00 [只看该作者]

贴出完整代码看看

 回到顶部
帅哥哟,离线,有人找我吗?
jygyyl
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
回复:(有点蓝)贴出完整代码看看  发帖心情 Post By:2021/9/26 11:14:00 [只看该作者]

完整代码如下:
Dim c1,c2 As WinForm.ComboBox
Dim t1,t2,t3,t4 As WinForm.TextBox
Dim t11,t21,t31,t41 As Integer
Dim Ch1 As WinForm.CheckBox
Ch1= e.Form.Controls("CheckBox1")
c1 = e.Form.Controls("ComboBox1")
c2 = e.Form.Controls("ComboBox2")
t1 = e.Form.Controls("TextBox1")
t2 = e.Form.Controls("TextBox2")
t3 = e.Form.Controls("TextBox3")
t4 = e.Form.Controls("TextBox4")
t11 = t1.Value
t21 = t2.Value
t31 = t3.Value
t41 = t4.Value
Dim c11 As BarCodeEnum
Select Case c1.Value
    Case "Codabar"
        c11= BarCodeEnum.Codabar
    Case "Code128"
        c11= BarCodeEnum.Code128
    Case "Code39"
        c11= BarCodeEnum.Code39
    Case "Code93"
        c11= BarCodeEnum.Code93
    Case "CodeI2of5"
        c11= BarCodeEnum.CodeI2of5
    Case "Ean13"
        c11= BarCodeEnum.Ean13
End Select
Dim c21 As BarDirectionEnum
Select Case c2.Value
    Case "Normal"
        c21= BarDirectionEnum.Normal
    Case "Down"
        c21= BarDirectionEnum.Down
    Case "Up"
        c21= BarDirectionEnum.Up
End Select

If t11 = 0 OrElse t21= 0 Then    '筛选后全部选定区域
    With CurrentTable
        .Select(0,0, .Rows.Count - 1, .Cols.Count - 1)
    End With
Else
    With CurrentTable
        .Select(t11-1, 0,t21-1,  .Cols.Count - 1)
    End With
End If

Dim doc As New PrintDoc '定义一个报表
Dim tbl As Table = CurrentTable
'Doc.Columns.Add() '增加第一栏
'Doc.Columns.Add() '增加第二栏 '第一栏的宽度为60毫米
'Doc.Columns(0).Spacing = 20 '栏间距1毫米
For i As Integer = tbl.TopRow To tbl.BottomRow
    Dim rw As Row = tbl.Rows(i)
    Dim rt As New prt.RenderTable() '定义一个表格对象
    Dim rx As New prt.RenderText '定义一个文本对象
    Dim ra As New prt.RenderArea '定义一个容器
    'ra.Width = "Parent.Width"
    ra.width=50
    ra.height=30
    ra.CanSplitHorz = False '禁止水平分割
    ra.CanSplitVert = False '禁止容器因为分页而被垂直分割
    rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center '水平居中
    rt.Style.TextAlignVert = prt.AlignVertEnum.Center '内容垂直居中
    doc.PageSetting.Landscape = True  '横向打印
    Doc.PageSetting.PaperKind = 0
    Doc.PageSetting.LeftMargin = 2 '设置左边距
    Doc.PageSetting.RightMargin = 2  '设置右边距
    Doc.PageSetting.TopMargin = 2  '设置上边距
    Doc.PageSetting.BottomMargin = 2  '设置下边距
    '指定行数?列数?列宽?行高
    rt.Rows.Count = 3 '设置总行数
    rt.Cols.Count = 2 '设置总列数
    rt.Height = 26 '设置表格的高度
    '    rt.Width = "Parent.Width" '设置表格的宽度
    rt.Cols(0).Width = 20  '第一列的宽度
    rt.Cols(1).Width = 15  '第二列的宽度
    'rt.Cols(2).Width = 12
    rt.Rows(1).Height = 10 '第二行的高度(用于显示条码)
    '设置合并单元格
    rt.Cells(0,2).SpanRows = 3 '第1行第5个单元格向下合并3行(用于显示照片)
    rt.Cells(1,0).SpanCols = 2 '向右合并2列
    rt.Cells(2,0).SpanCols = 2  '向右合并2列
    '设置表格样式
    rt.CellStyle.Spacing.All = 1 '单元格内容缩进1毫米
    rt.Style.Spacing.Bottom = 2 '和下一个出入证的距离是8毫米
    ' rt.Style.GridLines.All = New prt.Linedef '设置网格线
    '下面很简单,指定每一个单元格的内容
    rt.Cells(0,0).Text= rw("机构") '"部门"
    rt.Cells(0,1).Text = rw("组别")&rw("编组")  '"姓名"
    rt.Cells(2,0).Text=  rw("条码") '"编号"
    Dim rbc As New prt.RenderBarCode()
    rbc.Width = t31
    rbc.Height = t41
    rbc.BarCodeType = c11
    rbc.BarDirection = c21
    rbc.Text = rw("条码")
    
    If Ch1.Checked = True Then
        rbc.ShowText = True   '是否显示编码
    Else
        rbc.ShowText = False
    End If
    rt.cells(1,0).RenderObject = rbc
    ra.Children.Add(rt) '加入到容器中
    
    Dim img As prt.RenderImage
    Dim Bar As New BarCodeBuilder
    Bar.Symbology = Barpro.Symbology.QRCode
    Bar.BarRatio = 0.3
    Bar.BarWidth = 15
    Bar.BarHeight = 15
    bar.Code =  rw("条码")
    img = new prt.RenderImage
    img.Image =  bar.GetImage
    img.Width = 16
    img.height= 16
    'img.Style.Spacing.All = 0.25
    img.X=33
    img.Y=5
'    rt.cells(0,2).RenderObject = img
    ra.Children.Add(img)
    Doc.Body.ChildRen.Add(ra) '将容器加入到报表中
Next
Doc.PrinterName = "ZDesigner GK888t"
Doc.print
'Doc.Preview()
[此贴子已经被作者于2021/9/26 11:21:22编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105959 积分:538870 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/26 11:24:00 [只看该作者]

如果不是打印A4,指定一下纸张大小:http://www.foxtable.com/webhelp/topics/1191.htm

 回到顶部
帅哥哟,离线,有人找我吗?
jygyyl
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
回复:(有点蓝)如果不是打印A4,指定一下纸张大小:...  发帖心情 Post By:2021/9/26 11:35:00 [只看该作者]

解决了。谢谢老师!

 回到顶部