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秒才显示出来,想问一下有没有更快的办法?
谢谢!