【问题标题】:How to tweak the vertical position of text in a cell?如何调整单元格中文本的垂直位置?
【发布时间】:2016-10-28 11:28:02
【问题描述】:

我对表格中的垂直对齐有疑问。文字太靠近底部边框:

我的代码如下所示:

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; 没有任何效果。

【问题讨论】:

  • 我的意思是垂直对齐,文本几乎写在边界线而不是中间。我将用对齐中心替换我的代码!但是没有对齐的表格选项。和nested.DefaultCell.VerticalAlignment = Element.ALIGN_MIDDLE;不起作用。
  • 我已经更新了你的问题。现在可以回答了。
  • 对不起,这是我的第一篇文章。下次我会做得更好。我正在使用 itextsharp 5.5.9。
  • 检查这个? - SO Question
  • @pijemcolu 我不知道那个答案,但是(接受的)最佳答案并不能解决问题。你需要this answer,我刚刚投了赞成票,因为这或多或少是解决问题的方法。这个答案远未完成,这就是我没有将此问题标记为“重复”的原因。

标签: c# alignment itext


【解决方案1】:

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

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

  1. 前导:默认字体大小为12 pt;默认行距为 18 pt。 18 pt 的领先有点高,会导致基线上方有额外的空间。如果减少前导,您会发现顶部的空间更少。
  2. 不同的字体有不同的升序和降序值;您添加单元格的方式,iText 不会考虑这些值。

我的建议:告诉 iText 使用你正在使用的字体的升序和降序:

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

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

【讨论】:

    猜你喜欢
    • 2014-08-03
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多