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()