0

我正在实现 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 保留什么?

4

1 回答 1

0

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

这是一个简单的解决方案:基于“约定”。如果你真的想知道某些特定的东西占用了多少水平空间,你需要计算上升和下降,就像我的书的图 3.7 中所做的那样。您将在此处找到代码。如果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;

什么时候y使用 Y 坐标,showTextAligned()以确保保持空间y + aboveBaseliney + underBaseline空闲。这是准确的解决方案。

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

于 2013-09-17T13:54:19.427 回答