Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共2 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:[求助] 专业报表

1楼
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()
2楼
有点蓝 发表于: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()
共2 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .02344 s, 2 queries.