如何调整单元格中文本的垂直位置?

时间:2016-06-26 09:47:04

标签: c# alignment itext

我在表格中遇到垂直对齐问题。文字太靠近底部边框:

enter image description here

我的代码如下所示:

nested = new PdfPTable(3);
nested.DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE;
nested.DefaultCell.HorizontalAlignment = Element.ALIGN_CENTER;
nested.WidthPercentage = 100;
nested.AddCell(new Phrase("blablabla"));
nested.AddCell(new Phrase("blablabla"));
nested.DefaultCell.HorizontalAlignment = Element.ALIGN_RIGHT;
nested.AddCell(new Phrase("Stand: " + 
pdfdoc.Add(nested);

添加或删除行DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE;不会产生任何影响。

1 个答案:

答案 0 :(得分:0)

您正在创建只有一行文字的PdfCell对象。单元格的高度将根据该文本行确定。文本将自动在中间对齐。这就解释了为什么添加或删除DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE;没有效果:就iText而言,文本已在中间对齐。

你声称这不是真的,因为你认为文本的基线太靠近底部了。我理解这种说法,但如果您阅读我对问题How does a PdfPCell's height relate to the font size?的回答,您应该了解哪些因素会产生这种看法:

  1. 领先:默认字体大小为12磅;默认领先是18磅。 18磅的领先优势很高,导致基线以上的额外空间。如果你减少领先优势,你会发现顶部的空间更小。
  2. 不同的字体具有不同的上升和下降值;添加单元格的方式,iText不会考虑这些值。
  3. 我的建议:告诉iText使用您正在使用的字体的上升和下降:

    nested.DefaultCell.UseAscender = true;
    nested.DefaultCell.UseDescender = true;
    

    你会注意到文本的位置已经好多了。如果不是更好,您可能需要添加一些填充。当然,所有这些都在official documentation中解释,您将在其中找到一个名为Spacing.cs的示例。试试这个示例,您可以通过调整UseAscenderUseDescenderPadding等值来查看内容的位置如何变化。