iText:PdfTable单元垂直对齐

我正在尝试垂直对齐我的headet单元格文本在单元格高度的中间。

这是我的代码:

PdfPCell c1 = new PdfPCell(cerate_phrase("" ,regular_bold )); c1.setHorizontalAlignment(Element.ALIGN_CENTER); c1.setVerticalAlignment(Element.ALIGN_MIDDLE); c1.setBackgroundColor(BaseColor.LIGHT_GRAY); table_.addCell(c1); 

但这不起作用..setHorizo​​ntalAlignment居中但不是setVerticalAlignment。

我做错了吗? 我怎么能在中间做到?

任何帮助都将被批准。

根据Lowagie的说法:

 PdfPCell cell = new PdfPCell(new Phrase("blah Blah blah"); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); 

这在技术意义上总是正确的,但有时看起来很糟糕。

要居中,在对象周围绘制一个框,找到它的中间,并将其与周围对象的中心对齐。

iText因此找到短语的中心,并对齐它。 但是人眼有时会关注大部分文本,比如基线和帽子高度之间的字体部分。 所以为了让它看起来很好,你需要相对于那个中心。

 Phrase content = new Phrase("Blah blah blah", Font); Float fontSize = content.getFont().getSize(); Float capHeight = content.getFont().getBaseFont().getFontDescriptor(BaseFont.CAPHEIGHT, fontSize); Float padding = 5f; PdfPCell cell = new PdfPCell(content); cell.setPadding(padding); cell.setPaddingTop(capHeight - fontSize + padding); 

请注意,不使用PdfPCell方法setVerticalAlignment(..)。

看起来这不一定适用于多行短语,但确实如此。

排版行术语

如果iText可以在事物周围显示边界框,那么问题就很明显了(记住,你可以告诉iText绘制边界框,它只是比神奇的开/关开关更多的工作)。

此解决方案改编自Paulo Soares的电子邮件 。

c1.setVerticalAlignment(Element.ALIGN_MIDDLE);之前添加cell.setUseAscender(true) c1.setVerticalAlignment(Element.ALIGN_MIDDLE); 我和你有同样的问题,当我在上面添加代码时发现它可以正常工作,希望这可以解决你的问题,谢谢。