我正在使用iText来编写PDF。在某些情况下,我需要使用SetVisibleSignature
函数对PDF进行签名。使用此函数,我们需要指定要将内容写入的矩形。
但是我很难计算出字符串的宽度,以便我可以在设置PDF上的签名之前设置矩形。
如何计算iText中的字符串宽度?
答案 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
);