以文本方式查看主题 - Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp) -- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2) ---- [求助]条码打印求助 (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=172044) |
-- 作者:jygyyl -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2021/9/26 10:48:00 -- 单独到命令窗口调用这个代码,表格是否选中了需要的行? [此贴子已经被作者于2021/9/26 10:48:27编辑过]
|
-- 作者:jygyyl -- 发布时间:2021/9/26 11:04:00 -- 回复:(有点蓝)单独到命令窗口调用这个代码,表格是... 可以,但是只打印第一行 |
-- 作者:有点蓝 -- 发布时间:2021/9/26 11:08:00 -- 贴出完整代码看看 |
-- 作者:jygyyl -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2021/9/26 11:24:00 -- 如果不是打印A4,指定一下纸张大小:http://www.foxtable.com/webhelp/topics/1191.htm |
-- 作者:jygyyl -- 发布时间:2021/9/26 11:35:00 -- 回复:(有点蓝)如果不是打印A4,指定一下纸张大小:... 解决了。谢谢老师! |