我正在实现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 ??
答案 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轴向上而不是向下。