【问题标题】:How to calculate/set font line margin itextPDF如何计算/设置字体线边距itextPDF
【发布时间】:2013-09-21 20:58:53
【问题描述】:

我正在实现 PdfPageEventHelper 事件和页脚内容如下:

             ColumnText.showTextAligned(cb, Element.ALIGN_RIGHT, new Phrase(String.format(" %d ", 
            writer.getPageNumber()),footerFont), 
            document.right() - 2 , document.bottom() - 20, 0);

现在,我有 3 行需要添加到页脚中,但我找不到设置其垂直边距的最佳方法。 (每 3 行有不同的字体大小)。 应该为 - document.bottom() - XXX 保留什么??

【问题讨论】:

    标签: java itext footer


    【解决方案1】:

    两行之间的区别是leading。您可以选择自己的行距,但习惯使用 1.5 倍的字体大小。您自己逐行绘制,使用不同的字体大小,因此您必须根据该字体大小调整 Y 值。请注意,ColumnText.showTextAligned() 使用 Y 值作为要添加的文本的基线,因此如果您有一些字体大小为 12pt 的文本,则需要考虑 18pt 的行距。如果您的字体大小为 8pt,请确保您有 12pt。

    这是一个简单的解决方案:基于“约定”。如果您真的想知道某个特定 占用了多少水平空间,则需要计算升序和降序,就像在figure 3.7 of my book 中所做的那样。您会找到代码here。如果bf 是您的字体(BaseFont 对象),text 是您的文本(a String)并且size 是您的字体大小(a float),那么您的文本的高度是相等的给height

    float aboveBaseline = bf.getAscentPoint(text, size);
    float underBaseline = bf.getDescentPoint(text, size);
    float height = aboveBaseline - underBaseline;
    

    yshowTextAligned() 中使用的Y 坐标时,请确保在y + aboveBaseliney + underBaseline 之间留有空白。这是准确的解决方案。

    请注意,document.bottom() - 20 看起来有些奇怪。我希望document.bottom() + 20 因为 PDF 坐标系的 Y 轴指向上方,而不是下方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      • 2015-10-07
      相关资源
      最近更新 更多