Foxtable(狐表)用户栏目专家坐堂 → [求助] 专业报表


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

主题:[求助] 专业报表

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


加好友 发短信
等级:七尾狐 帖子:1666 积分:14870 威望:0 精华:0 注册:2014/6/6 8:42:00
[求助] 专业报表  发帖心情 Post By: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()

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


加好友 发短信
等级:超级版主 帖子:113259 积分:576730 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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()

 回到顶部