画布内文本中的 iText 垂直对齐不起作用

问题描述

我正在尝试将画布内的文本设置为与 VerticalAlignment.BottOM 属性值垂直对齐,但无论我放什么都不会改变视觉效果

retangulo = New iText.Kernel.Geom.Rectangle(122,AlturaPag - 208,235,27)
PdfCanvas = New iText.Kernel.Pdf.Canvas.PdfCanvas(page).Setlinewidth(1).Rectangle(retangulo).stroke()
canvas = New iText.Layout.Canvas(PdfCanvas,retangulo)
texto = (New iText.Layout.Element.Text(Npagador).SetFontSize(11).SetBold)

' VerticalAlingment = BottOM \/     
paragrafo = (New iText.Layout.Element.Paragraph().Add(texto).SetTextAlignment(TextAlignment.LEFT).SetVerticalAlignment(VerticalAlignment.BottOM))
canvas.Add(paragrafo)

enter image description here

解决方法

您正在尝试将段落的内容与段落本身的底部对齐,而段落在布局时仅使用最小的必要高度,因此无论您设置什么对齐方式(底部或顶部),结果只是相同的只是因为段落将自身打包到最小高度。

为了确保 setVerticalAlignment 有效果,您需要通过设置段落的高度来给段落更多的垂直空间。这是一个示例,我设置段落高度以匹配您添加它的画布的高度,因为它是画布中的唯一元素。我还将段落的边距设置为零,这样您就不会在文本周围获得额外的间距。

代码是用 Java 编写的,但您可以像我将代码转换为 Java 一样轻松地将其转换回 VB.NET:

Paragraph p = new Paragraph().add("Test").setTextAlignment(TextAlignment.LEFT)
        .setVerticalAlignment(VerticalAlignment.BOTTOM).setHeight(retangulo.getHeight());
p.setMargin(0);