You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DevExpress报表每页左侧边距添加动态垂直LabelBrick求助

解决DevExpress报表动态长度垂直侧边标签的最优方案

需求是给所有DevExpress报表页面左侧边距添加垂直水印标签,文本来自数据库、长度不固定。官方示例无法适配动态文本长度,手动计算尺寸的方式灵活性差,以下是更优实现方案:

核心优化思路

  • 利用报表打印系统的图形对象自动测量文本尺寸,替代硬编码的尺寸系数
  • 基于页面边距和文本尺寸动态计算标签位置,确保标签始终居中于左侧边距且不超出范围
  • 通过报表的AfterPrint事件批量处理所有页面,避免重复代码

优化后的代码实现

Private Sub AddVerticalMarginLabels(ByVal report As DevExpress.XtraReports.UI.XtraReport)
    Dim printingSystem = report.PrintingSystem
    Dim font = New Font("Arial", 12, FontStyle.Bold) '可根据需求调整字体
    Dim labelText = "从数据库获取的动态文本" '实际替换为数据库查询结果

    '遍历所有页面
    For Each page As Page In printingSystem.Pages
        '使用PrintingSystem的Graphics测量文本实际宽度(垂直旋转后,文本宽度对应标签的高度)
        Using g = printingSystem.CreateGraphics()
            Dim textSize = g.MeasureString(labelText, font)
            '垂直旋转后,标签的实际尺寸需要交换宽高:原文本宽度变为标签高度,原高度变为标签宽度
            Dim brickSize = New SizeF(textSize.Height, textSize.Width)

            '计算左侧边距内的居中位置
            'X坐标:左侧边距的中间位置,留出少量空白避免贴边
            Dim posX = page.MarginsF.Left / 2 - brickSize.Width / 2
            'Y坐标:页面内容区域的垂直中心(边距顶部 + 内容高度的一半 - 标签高度的一半)
            Dim posY = page.MarginsF.Top + (page.Size.Height - page.MarginsF.Top - page.MarginsF.Bottom - brickSize.Height) / 2

            '创建垂直标签Brick
            Dim labelBrick As New LabelBrick() With {
                .Angle = 90,
                .Font = font,
                .Text = labelText,
                .CanShrinkAndGrow = True, '开启自动伸缩适配文本
                .Style = {.TextAlignment = TextAlignment.MiddleCenter}
            }

            '初始化Brick的位置和尺寸
            labelBrick.Initialize(printingSystem, New RectangleF(New PointF(posX, posY), brickSize))
            '将Brick添加到页面的前景层(或背景层,根据需求调整)
            page.AddBrick(labelBrick)
        End Using
    Next
End Sub

使用方式

在报表的AfterPrint事件中调用该方法:

Private Sub XtraReport1_AfterPrint(sender As Object, e As EventArgs) Handles MyBase.AfterPrint
    AddVerticalMarginLabels(Me)
End Sub

方案优势

  1. 完全适配动态文本:无论文本长短,都会自动计算最合适的尺寸,不会出现截断或空白浪费
  2. 位置自动居中:标签始终位于左侧边距垂直居中位置,无需手动调整偏移量
  3. 低耦合易维护:逻辑封装为独立方法,可快速复用在不同报表中

内容的提问来源于stack exchange,提问作者Eiffel65

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:40:37