我试图垂直对齐我的头像单元格文本在单元格高度的中间.
这是我的代码:
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);
但这不工作.. setHorizontalAlignment居中但不是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来绘制边界框,它只是一个比魔法开/关开关更多的工作).