Foxtable(狐表)用户栏目专家坐堂 → 二维码打印的速度如何提高


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

主题:二维码打印的速度如何提高

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


加好友 发短信
等级:八尾狐 帖子:1909 积分:16987 威望:0 精华:0 注册:2014/7/29 19:09:00
二维码打印的速度如何提高  发帖心情 Post By:2022/11/8 14:14:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:二维码.png
图片点击可在新窗口打开查看

drs = DataTables("销售出库单_明细").Select("出库单号 = '" & pr("出库单号") & "'")
If drs.count > 0 Then
    For i As Integer = 0 To drs.Count - 1
        If drs(i)("箱数") > 0 Then
            For i3 As Integer = 1 To drs(i)("箱数")
                Dim ra As New prt.RenderArea
                ra.Width = CInt(Vars("tagW")) '标签宽
                ra.Height = CInt(Vars("tagH")) '标签高
                
                ra.SplitHorzBehavior = prt.SplitBehaviorEnum.Never '禁止水平分割
                ra.SplitVertBehavior = prt.SplitBehaviorEnum.Never '禁止垂直分割
                Doc.Body.ChildRen.Add(ra) '将容器加入到报表中
                
                Dim rt As New prt.RenderTable
                
                '指定总列数及各列宽,未指定的平分剩余宽度
                CW = dr("Bodycw") '""
                Cls = CW.split("|")
                rt.Cols.Count = Cls.Length + 1 '设置总列数
                For i2 As Integer = 0 To Cls.Length - 1
                    rt.Cols(i2).Width = Cls(i2)
                Next
                
                '设置表格总体样式-------------------------------------------0
                rt.Style.TextAlignHorz = prt.AlignHorzEnum.left '文本水平居中
                rt.Style.TextAlignVert = prt.AlignVertEnum.Center '文本垂直居中
                rt.CellStyle.Spacing.All = 1 '单元格内容缩进1毫米
                rt.Style.GridLines.All = New prt.Linedef(0.2, Color.Black) '设置网格线
                rt.Style.Font = New Font("宋体", fs) '设置总体字体
                rt.SplitHorzBehavior = prt.SplitBehaviorEnum.Never '表格宽度超出页宽时,可以水平换页
                rt.SplitVertBehavior = prt.SplitBehaviorEnum.Never '表格宽度超出页宽时,可以水平换页
                
                rt.Rows(rt.Rows.Count).Height = rh
                rt.Cells(rt.Rows.Count - 1, 0).Text = "客户名称"
                rt.Cells(rt.Rows.Count - 1, 1).Text = "xxxxxx" 
                rt.Cells(rt.Rows.Count - 1, 2).Text = "厂商名称"
                rt.Cells(rt.Rows.Count - 1, 3).Text = "xxxxx"
                
                rt.Rows(rt.Rows.Count).Height = rh
                rt.Cells(rt.Rows.Count - 1, 0).Text = "物料名称"
                rt.Cells(rt.Rows.Count - 1, 1).Text = drs(i)("品名") 
                rt.Cells(rt.Rows.Count - 1, 2).Text = "采购订单号"
                rt.Cells(rt.Rows.Count - 1, 3).Text = drs(i)("来源单号")
                
                rt.Rows(rt.Rows.Count).Height = 14
                rt.Cells(rt.Rows.Count - 1, 0).Text = "xxxx料号"
                rt.Cells(rt.Rows.Count - 1, 1).Text = drs(i)("产品编码")
                'B----第2单元格显示条形码--(如果是向上合并行的填充内容必须在第一行)
                Dim ra1 As New prt.RenderArea
                ra1 = rt.Cells(rt.Rows.Count - 1, 1).Area '引用单元格的容器
                Dim rg2 As prt.RenderGraphics
                Dim Bar2 As New BarCodeBuilder
                Bar2.Symbology = Barpro.Symbology.Code128
                ra1.Stacking = prt.StackingRulesEnum.InlineLeftToRight '设置容器中对象的排列方式
                bar2.Code = drs(i)("产品编码")
                bar2.BarHeight = 8 '条码高度
                bar2.BarWidth = 0.14 '窄条宽度(决定条码的宽度)
                Bar2.QuietZoneWidth = 1 '静区宽度(两边空白)
                Bar2.BarRatio = 2 '宽窄比例
                Bar2.CodeAlignment = Barpro.Alignment.BelowCenter '文本位置
                rg2 = New prt.RenderGraphics
                bar2.DrawOnCanvas(rg2.Graphics, 0, 0, 1)
                ra1.Children.Add(rg2)
                'B----第2单元格显示条形码--(如果是向上合并行的填充内容必须在第一行)
                
                rt.Cells(rt.Rows.Count - 1, 2).SpanCols = 2
                
                'B----右侧单元格合并显示二维码--(如果是向上合并行的填充内容必须在第一行)
                Dim ra2 As New prt.RenderArea
                ra2 = rt.Cells(rt.Rows.Count - 1, 2).Area '引用单元格的容器
                Dim rg As prt.RenderGraphics
                Dim Bar As New BarCodeBuilder
                Bar.Symbology = Barpro.Symbology.QRCode
                ra2.Stacking = prt.StackingRulesEnum.InlineLeftToRight '设置容器中对象的排列方式
                Bar.Code = drs(i)("产品编码") & "&" & CStr(pr("出库日期")).Replace("-", "/") & "&" & drs(i)("单箱数量") & "&GYSLS03244&PM-" & CStr(pr("出库日期")).Replace("-", "") & Format(i3 , "000")
                Bar.CodeAlignment = Barpro.Alignment.BelowLeft
                Bar.QRCodeModuleSize = 0.8
                Bar.QuietZoneWidth = 1 '静区宽度(两边空白)
                rg = New prt.RenderGraphics
                bar.DrawOnCanvas(rg.Graphics, 0, 0, 1)
                rg.Style.Spacing.left = 5
                rg.Style.Spacing.top = 2
                ra2.Children.Add(rg)
                'B----左侧单元格合并显示二维码--(如果是向上合并行的填充内容必须在第一行)
                
                rt.Rows(rt.Rows.Count).Height = 11
                rt.Cells(rt.Rows.Count - 1, 0).Text = "生产日期"
                'B----显示条形码--(如果是向上合并行的填充内容必须在第一行)
                ra1 = New prt.RenderArea
                ra1 = rt.Cells(rt.Rows.Count - 1, 1).Area '引用单元格的容器
                rg2 = New prt.RenderGraphics
                Bar2 = New BarCodeBuilder
                Bar2.Symbology = Barpro.Symbology.Code128
                ra1.Stacking = prt.StackingRulesEnum.InlineLeftToRight '设置容器中对象的排列方式
                bar2.Code = pr("出库日期")
                bar2.BarHeight = 5 '条码高度
                bar2.BarWidth = 0.21 '窄条宽度(决定条码的宽度)
                Bar2.QuietZoneWidth = 1 '静区宽度(两边空白)
                Bar2.BarRatio = 2 '宽窄比例
                Bar2.CodeAlignment = Barpro.Alignment.BelowCenter '文本位置
                rg2 = New prt.RenderGraphics
                bar2.DrawOnCanvas(rg2.Graphics, 0, 0, 1)
                ra1.Children.Add(rg2)
                'B----显示条形码--(如果是向上合并行的填充内容必须在第一行)
                rt.Cells(rt.Rows.Count - 1, 2).SpanCols = 2
                
                rt.Rows(rt.Rows.Count).Height = 11
                rt.Cells(rt.Rows.Count - 1, 0).Text = "MPN号"
                'B----显示条形码第2单元格--(如果是向上合并行的填充内容必须在第一行)
                ra1 = New prt.RenderArea
                ra1 = rt.Cells(rt.Rows.Count - 1, 1).Area '引用单元格的容器
                rg2 = New prt.RenderGraphics
                Bar2 = New BarCodeBuilder
                Bar2.Symbology = Barpro.Symbology.Code128
                ra1.Stacking = prt.StackingRulesEnum.InlineLeftToRight '设置容器中对象的排列方式
                bar2.Code = "JD20220223" '固定字符
                bar2.BarHeight = 5 '条码高度
                bar2.BarWidth = 0.23 '窄条宽度(决定条码的宽度)
                Bar2.QuietZoneWidth = 1 '静区宽度(两边空白)
                Bar2.BarRatio = 1.5 '宽窄比例
                Bar2.CodeAlignment = Barpro.Alignment.BelowCenter '文本位置
                rg2 = New prt.RenderGraphics
                bar2.DrawOnCanvas(rg2.Graphics, 0, 0, 1)
                ra1.Children.Add(rg2)
                'B----显示条形码第2单元格--(如果是向上合并行的填充内容必须在第一行)
                rt.Cells(rt.Rows.Count - 1, 2).SpanCols = 2
                rt.Cells(rt.Rows.Count - 3, 2).SpanRows = 3 '向上合并行数
                
                rt.Rows(rt.Rows.Count).Height = 11
                rt.Cells(rt.Rows.Count - 1, 0).Text = "数量"
                ' rt.Cells(rt.Rows.Count - 1, 1).Text = drs(i)("单箱数量")
                'B----显示条形码第2单元格--(如果是向上合并行的填充内容必须在第一行)
                ra1 = New prt.RenderArea
                ra1 = rt.Cells(rt.Rows.Count - 1, 1).Area '引用单元格的容器
                rg2 = New prt.RenderGraphics
                Bar2 = New BarCodeBuilder
                Bar2.Symbology = Barpro.Symbology.Code128
                ra1.Stacking = prt.StackingRulesEnum.InlineLeftToRight '设置容器中对象的排列方式
                bar2.Code = drs(i)("单箱数量") & drs(i)("计量单位").ToUpper() '单位转大写
                bar2.BarHeight = 5 '条码高度
                bar2.BarWidth = 0.30 '窄条宽度(决定条码的宽度)
                Bar2.QuietZoneWidth = 1 '静区宽度(两边空白)
                Bar2.BarRatio = 1.5 '宽窄比例
                Bar2.CodeAlignment = Barpro.Alignment.BelowCenter '文本位置
                rg2 = New prt.RenderGraphics
                bar2.DrawOnCanvas(rg2.Graphics, 0, 0, 1)
                ra1.Children.Add(rg2)
                'B----显示条形码第2单元格--(如果是向上合并行的填充内容必须在第一行)
                rt.Cells(rt.Rows.Count - 1, 2).SpanCols = 2
                
                ra.ChildRen.Add(rt) '将容器加入到报表中
            Next
        End If
        
    Next
    
    '---选择打印方式
    If prt_method = "Preview" Then
        Doc.Preview() '预览报表
    ElseIf prt_method = "Print" Then
        Doc.Print()
    End If
End If
上面的代码生成四个条码,一个二维码,每次打印数据其实只有几行,只是每行中的箱数可能比较多,都在50到100箱之间
所以每箱遍历生成这几个条码或者二维码,每箱一张,如果50张左右差不多要近50秒才显示出来,想问一下有没有更快的办法?

谢谢!

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


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

可以考虑逐行打印,一行一个报表,而不是全部在一个报表里生成完毕再打印

drs = DataTables("销售出库单_明细").Select("出库单号 = '" & pr("出库单号") & "'")
If drs.count > 0 Then
    For i As Integer = 0 To drs.Count - 1
Dim doc As New PrintDoc '定义一个报表
……生成报表的代码
    '---选择打印方式
    If prt_method = "Preview" Then
        Doc.Preview() '预览报表
    ElseIf prt_method = "Print" Then
        Doc.Print()
    End If
   Next 
End If

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


加好友 发短信
等级:八尾狐 帖子:1909 积分:16987 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2022/11/8 17:08:00 [只看该作者]

明细表中的多行是同一张主表单里面的,不能分开,我是想问一下是否一楼的代码方式运行效率太低了,有没有更高效的方法

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


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

没有什么可以优化的了

 回到顶部