2009-10-06 122 views
19

我正在使用iText编写PDF。在某些情况下,我需要使用SetVisibleSignature函数对PDF进行签名。有了这个函数,我们需要指定我们将写入内容的矩形。如何计算iText中的字符串宽度?

但是我很难计算字符串的宽度,所以我可以在设置PDF上的签名之前设置矩形。

如何计算iText中的字符串宽度?

回答

24

您可以使用BaseFont.getWidthPoint(String text, float fontSize)来获取pt中字符串的宽度。

或将字符串一大块,做chunk.getWidthPoint()

+0

您如何检索basefont实例? – 2013-10-24 09:05:51

+0

我想知道表中段落的宽度。看来使用块的方法返回错误的值。 – 2013-10-24 09:27:03

+0

getWidthPoint如何静态地知道假定哪种字体? x_X – 2016-03-22 09:07:00

12

接受的答案BaseFont.getWidthPoint,不会在iText的5.5.4工作,因为方法是不是静态的了。即使它仍然存在,它不会考虑正在使用的真实字体(它的族或其粗体/斜体),因为它是静态的并且正在接收有限的参数。

chunk.getWidthPoint()确实可以像后面提到的那样处理真正的字体,但是对于某些用途来说,为了宽度而不断地创建一个块是很浪费的,特别是如果该块不在以后使用。

这是chunk.getWidthPoint()作为一个独立的替代品使用的底层代码,假设你没有做任何水平缩放:

font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize()); 
1

我终于实现了这个与ColumnText.getWidth(Phrase phrase)大小什么Phrase的宽度将在用ColumnText.showTextAligned显示之前。

在这个片段中,我使用ColumnText.getWidth来调整字符串的长度以将其放在页面的右上角。它在人像A4中工作,没有进一步测试。

Phrase phrase = new Phrase("Bla bla bla!", new Font(FontFamily.HELVETICA, 9)); 
float width = ColumnText.getWidth(phrase); 

ColumnText.showTextAligned (
    canvas, 
    Element.ALIGN_LEFT, 
    phrase, 
    canvas.getPdfDocument().right() - width, 
    canvas.getPdfDocument().top() + 9, 
    0 
);