如何计算/设置字体边距itextPDF

时间:2013-09-17 12:13:07

标签: java itext footer

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

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

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

1 个答案:

答案 0 :(得分:0)

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

这是一个简单的解决方案:基于“惯例”。如果你真的想知道一些特定需要多少水平空间,你需要计算上升器和下降器,就像figure 3.7 of my book中所做的那样。你会找到代码here。如果bf是您的字体(BaseFont对象),则text是您的文字(String),size是您的字体大小({{1} }}),然后文本的高度等于float

height

float aboveBaseline = bf.getAscentPoint(text, size); float underBaseline = bf.getDescentPoint(text, size); float height = aboveBaseline - underBaseline; y中使用的Y坐标时,请确保将showTextAligned()y + aboveBaseline之间的空格保持为空。这是准确的解决方案。

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