RDLC 比例图像对齐

RDLC Proportional Image Alignment

提问人:CedL 提问时间:10/11/2023 最后编辑:CedL 更新时间:10/17/2023 访问量:33

问:

在 RDLC 文件中,有没有办法将图像与 Tablix 单元格高度的中心对齐?不知何故,它只能有一个固定的位置。我能找到的唯一解决方案是填充,但我似乎找不到在运行时获取单元格尺寸的方法。

我需要这样做的原因是,行上的其他单元格可能会更改行的高度,并且由于它主要只是文本框,因此图像看起来不对齐。

C# vb.net 图像 对齐 RDLC

评论

0赞 HardcoreGamer 10/16/2023
在我 5+ 年的 RDLC 经验中,我认为这是无法做到的。将不得不凑合着使用或错过对齐的图像。Fit proportion
1赞 CedL 10/17/2023
@HardcoreGamer我实际上找到了解决方案,将很快发布答案。

答:

1赞 CedL 10/17/2023 #1

我找到了某种解决方案。它需要知道将影响线高度的字段的值。您还需要一个等宽字体。所以基本上,我为图像的填充设置了一个表达式。从那里我调用一个报告函数:

Function GetLineAmount(ByVal str As String, ByVal lineLength As Integer) As Integer
    Dim amount As Integer = 1
    
    If str.Length > lineLength Then
        Dim positionToFind As Integer = lineLength
        
        If str(positionToFind) <> " " Then
            ' Find the last position of a space character
            Do While positionToFind >= 0 AndAlso str(positionToFind) <> " "
                positionToFind -= 1
            Loop
            
            ' Find the last position before that which is not a space (group of spaces)
            Do While positionToFind >= 0 AndAlso str(positionToFind) = " "
                positionToFind -= 1
            Loop
            
            positionToFind += 1
            
        End If
        
        If positionToFind = 0 Then 
            positionToFind = lineLength
        End If
        
        Dim rest As String = str.Substring(positionToFind)

        'PDF somehow "deletes" the first space in a line of text, so 2 space will leave one ... leaving this if to adapt to the pdf.
        If rest.Length > 0 AndAlso rest(0) = " " Then
            rest = rest.Substring(1)
        End If
        
        If rest <> String.Empty Then
            amount += GetLineAmount(rest, lineLength)
        End If
    End If
    
    Return amount
End Function

这将返回字段将采用的行数。您必须知道一行将采用的字符数(这就是为什么您需要等宽字体的原因)

然后从图像填充表达式中,代码将是:

 =  iif(Code.GetLineAmount(Fields!Description.Value,24) = 1
    , "1pt"
    , (4 + (6 * (Code.GetLineAmount(Fields!Description.Value,24) -2) )) & "pt"
    )

因此,在该部分中,我发送了字段描述,该字段是某个时候需要更多行的字段,然后是 24 个,即可以适合这些行的 caracters 数量。

(这部分是解释if)根据我的测试,这些是顶部和底部填充的观察结果:

  • 1 行需要 1pt 填充
  • 需要 2 行 4 pt
  • 3 和更多是 6 的增量。