我正在尝试将我的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);
但这不起作用。 setHorizontalAlignment
居中,但不是setVerticalAlignment
。
我做错了吗?我怎样才能在中间垂直对齐它?
任何帮助将不胜感激。
答案 0 :(得分:21)
根据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绘制边界框,这只是一个神奇的开/关切换工作,那么问题就很明显了。)
此解决方案改编自email from Paulo Soares。
答案 1 :(得分:12)
在cell.setUseAscender(true)
之前添加c1.setVerticalAlignment(Element.ALIGN_MIDDLE);
我和你有同样的问题,当我在上面添加代码时发现它可以正常工作,希望这可以解决你的问题,谢谢。
答案 2 :(得分:0)
您可以使用选项ExtraParagraphSpace
:
c1.HorizontalAlignment = Element.ALIGN_CENTER;
c1.VerticalAlignment = Element.ALIGN_MIDDLE;
c1.ExtraParagraphSpace = 2;
答案 3 :(得分:0)
你不能这样:
like '%something%'