以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助] 专业报表 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=196187) |
-- 作者:zcgmxf -- 发布时间:2025/4/7 11:00:00 -- [求助] 专业报表 老师,下面的代码执行后1、二维码水平不居中显示;2、表50行,只生成了一个页面。不知道是哪里问题,请指点,谢谢! Dim doc As New PrintDoc doc.Stacking = prt.StackingRulesEnum.InlineLeftToRight \' 设置页面边距 doc.PageSetting.LeftMargin = 10 doc.PageSetting.RightMargin = 10 doc.PageSetting.TopMargin = 10 doc.PageSetting.BottomMargin = 10 \' 创建主容器 Dim mainContainer As New prt.RenderArea mainContainer.SplitHorzBehavior = prt.SplitBehaviorEnum.Never \'禁止水平分割 mainContainer.SplitVertBehavior = prt.SplitBehaviorEnum.Never \'禁止垂直分割 mainContainer.Style.Spacing.Right = 2 \'设置标签之间的所有和上下间隔为2毫米 mainContainer.Style.Spacing.Bottom = 2 mainContainer.Style.Padding.All = 1 \' 标签内容距离边框为1毫米 mainContainer.Width = 210 mainContainer.Height = 279 doc.Body.Children.Add(mainContainer) \' 获取数据 Dim Table As DataTable = DataTables("小学生健康检查表") Dim rowCount As Integer = Table.DataRows.Count \' 定义5个二维码类型和标题 Dim qrTypes() As String = {"形态二维码", "视力二维码", "五官二维码", "血压二维码", "内科二维码"} Dim qrTitles() As String = {"形态检查", "视力检查", "五官检查", "血压测量", "内科检查"} For i As Integer = 0 To rowCount - 1 Dim Row As DataRow = Table.DataRows(i) Dim studentName As String = Row("班次").ToString() & "班-" & Row("姓名").ToString() \' 创建行容器 Dim rowContainer As New prt.RenderArea rowContainer.Stacking = prt.StackingRulesEnum.InlineLeftToRight rowContainer.Width = mainContainer.Width rowContainer.Style.Spacing.Right = 2 mainContainer.Children.Add(rowContainer) \' 左侧姓名区域 Dim nameArea As New prt.RenderArea nameArea.Width = 20 nameArea.Height = 25 nameArea.Style.Padding.All = 1 Dim nameText As New prt.RenderText nameText.Text = studentName nameText.Style.TextAlignHorz = prt.AlignHorzEnum.Center nameText.Style.TextAlignVert = prt.AlignVertEnum.Center nameArea.Children.Add(nameText) rowContainer.Children.Add(nameArea) \' 右侧二维码区域 For j As Integer = 0 To qrTypes.Length - 1 Dim qrData As String = Row(qrTypes(j)).ToString() Dim label As New prt.RenderArea label.Width = 30 label.Height = 25 label.Style.Padding.All = 1 label.Style.Borders.All = New prt.Linedef(0.3, Color.Blue) Dim rt As New prt.RenderText rt.Text = qrTitles(j) rt.Style.TextAlignHorz = prt.AlignHorzEnum.Center label.Children.Add(rt) \' If Not String.IsNullOrEmpty(qrData) Then \' Try Dim qr As New BarCodeBuilder qr.Symbology = Barpro.Symbology.QRCode qr.Code = qrData qr.BarRatio = 0.35 Dim img As New prt.RenderImage img.Image = qr.GetImage() img.Width = 16 img.Height = 16 img.Y = "Prev.Bottom + 2" img.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center label.Children.Add(img) \' Catch ex As Exception \' Dim errText As New prt.RenderText \' errText.Text = "生成失败" \' errText.Y = "Prev.Bottom + 2" \' label.Children.Add(errText) \' End Try \' Else \' Dim emptyText As New prt.RenderText \' emptyText.Text = "无数据" \' emptyText.Y = "Prev.Bottom + 2" \' label.Children.Add(emptyText) \' End If rowContainer.Children.Add(label) Next Next doc.Preview() |
-- 作者:有点蓝 -- 发布时间:2025/4/7 11:40:00 -- 容器不能换页的,改为使用RenderTable吧,我把有关DataTables("小学生健康检查表")表格的代码去掉了,自己改回来即可 Dim doc As New PrintDoc doc.Stacking = prt.StackingRulesEnum.InlineLeftToRight \' 设置页面边距 doc.PageSetting.LeftMargin = 10 doc.PageSetting.RightMargin = 10 doc.PageSetting.TopMargin = 10 doc.PageSetting.BottomMargin = 10 Dim rt As New prt.RenderTable \'rt.Style.GridLines.All = New prt.LineDef rt.CellStyle.Spacing.All = 1 \'单元格内容和网格线距离1毫米 rt.Cols.Count = 1 \'总列数为3 doc.Body.Children.Add(rt) \'doc.Stacking = prt.StackingRulesEnum.InlineLeftToRight \' 获取数据 \'Dim Table As DataTable = DataTables("小学生健康检查表") Dim rowCount As Integer = 50 \'Table.DataRows.Count \' 定义5个二维码类型和标题 Dim qrTypes() As String = {"形态二维码", "视力二维码", "五官二维码", "血压二维码", "内科二维码"} Dim qrTitles() As String = {"形态检查", "视力检查", "五官检查", "血压测量", "内科检查"} For i As Integer = 0 To rowCount - 1 \' Dim Row As DataRow = Table.DataRows(i) Dim studentName As String = "班-" & i \'Row("班次").ToString() & "班-" & Row("姓名").ToString() \' 创建行容器 Dim rowContainer As prt.RenderArea = rt.Cells(i, 0).Area rowContainer.Stacking = prt.StackingRulesEnum.InlineLeftToRight \' rowContainer.Width = mainContainer.Width rowContainer.Style.Spacing.Right = 2 \' mainContainer.Children.Add(rowContainer) \'doc.Body.Children.Add(rowContainer) \' 左侧姓名区域 Dim nameArea As New prt.RenderArea nameArea.Width = 20 nameArea.Height = 25 nameArea.Style.Padding.All = 1 Dim nameText As New prt.RenderText nameText.Text = studentName nameText.Style.TextAlignHorz = prt.AlignHorzEnum.Center nameText.Style.TextAlignVert = prt.AlignVertEnum.Center nameArea.Children.Add(nameText) rowContainer.Children.Add(nameArea) \' 右侧二维码区域 For j As Integer = 0 To qrTypes.Length - 1 Dim qrData As String = "Row(qrTypes(j)).ToString()" Dim label As New prt.RenderArea label.Width = 30 label.Height = 25 label.Style.Padding.All = 1 label.Style.Borders.All = New prt.Linedef(0.3, Color.Blue) Dim rx As New prt.RenderText rx.Text = qrTitles(j) rx.Style.TextAlignHorz = prt.AlignHorzEnum.Center label.Children.Add(rx) \' If Not String.IsNullOrEmpty(qrData) Then \' Try Dim qr As New BarCodeBuilder qr.Symbology = Barpro.Symbology.QRCode qr.Code = qrData qr.BarRatio = 0.35 Dim img As New prt.RenderImage img.Image = qr.GetImage() img.Width = 16 img.Height = 16 img.X = 6 img.Y = "Prev.Bottom + 2" img.Style.ImageAlign.AlignHorz = prt.ImageAlignHorzEnum.Center label.Children.Add(img) rowContainer.Children.Add(label) Next Next doc.Preview() |