24

我正在使用 iText 编写 PDF。在某些情况下,我需要使用该SetVisibleSignature功能对 PDF 进行签名。使用这个函数,我们需要指定我们将写入内容的矩形。

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

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

4

3 回答 3

28

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

或者将字符串放在一个 Chunk 中并执行chunk.getWidthPoint()

于 2009-10-26T14:16:58.373 回答
17

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

chunk.getWidthPoint()确实可以使用后面所述的真实字体,但对于某些用途来说,仅仅为宽度不断创建一个块是一种浪费,特别是如果该块不打算在以后使用。

这是chunk.getWidthPoint()用作独立替代品的底层代码,假设您没有进行任何水平缩放:

font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());
于 2015-01-29T20:16:11.517 回答
3

我最终这样做是ColumnText.getWidth( Phrase phrase )为了调整 a 的宽度,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
);
于 2016-12-15T14:55:52.740 回答