iText:PdfTable 单元格垂直对齐

Posted

技术标签:

【中文标题】iText:PdfTable 单元格垂直对齐【英文标题】:iText: PdfTable cell vertical alignment 【发布时间】:2011-07-30 02:23:48 【问题描述】:

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

这是我的代码:

    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

我做错了吗?我怎样才能垂直对齐它在中间?

任何帮助将不胜感激。

【问题讨论】:

这个问题已经被问过(并回答过)好几次了。搜索 PdfCell 垂直对齐。 @Mark Storer:我发现了这个问题:iText - 垂直对齐在复合模式下不起作用 - 但它对我不起作用。有什么想法吗? @MarkStorer 你能链接到骗子吗?我的搜索没有任何结果。 【参考方案1】:

根据 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。

【讨论】:

想法不错,但效果并不理想..我认为浮动“padding”不应该固定为“5f” 试试这个:setPaddingBottom(2*(fontSize-capHeight)); 你打电话给setVerticalAlignment(Element.ALIGN_MIDDLE); @djeikyb 超级您节省了我的时间。感谢您的回答 +1 投票。【参考方案2】:

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

【讨论】:

【参考方案3】:

您可以使用选项ExtraParagraphSpace:

c1.HorizontalAlignment = Element.ALIGN_CENTER;
c1.VerticalAlignment = Element.ALIGN_MIDDLE;
c1.ExtraParagraphSpace = 2;

【讨论】:

【参考方案4】:

你不能这样做:

cell.setBackgroundColor(BaseColor.GRAY);
cell.setHorizontalAlignment(Element.ALIGN_LEFT);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
cell.setUseAscender(true);

【讨论】:

以上是关于iText:PdfTable 单元格垂直对齐的主要内容,如果未能解决你的问题,请参考以下文章

itext的单元格怎么设置宽度

集合视图单元格垂直顶部对齐

具有不同高度的垂直对齐的集合视图单元格

表格单元格垂直对齐的默认值

如何在表格单元格的垂直中心对齐 CSS 箭头?

表格单元格中旋转文本的垂直对齐方式