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

时间:2009-10-06 14:35:50

标签: pdf pdf-generation itext text-width

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

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

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

3 个答案:

答案 0 :(得分:26)

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

或者将字符串放入Chunk并执行chunk.getWidthPoint()

答案 1 :(得分:15)

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

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

这是chunk.getWidthPoint()作为独立替代品使用的基础代码,假设您没有进行任何水平扩展:

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

答案 2 :(得分:3)

我最终使用ColumnText.getWidth( Phrase phrase )执行此操作,以便在使用Phrase显示ColumnText.showTextAligned之前确定https://github.com/lrperlmu/VSStreamliner2015的宽度。

在此代码段中,我使用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
);