我正在使用 iText 编写 PDF。在某些情况下,我需要使用该SetVisibleSignature
功能对 PDF 进行签名。使用这个函数,我们需要指定我们将写入内容的矩形。
但是我很难计算字符串的宽度,这样我就可以在 PDF 上设置签名之前设置矩形。
如何计算 iText 中的字符串宽度?
我正在使用 iText 编写 PDF。在某些情况下,我需要使用该SetVisibleSignature
功能对 PDF 进行签名。使用这个函数,我们需要指定我们将写入内容的矩形。
但是我很难计算字符串的宽度,这样我就可以在 PDF 上设置签名之前设置矩形。
如何计算 iText 中的字符串宽度?
您可以使用BaseFont.getWidthPoint(String text, float fontSize)
pt 获取字符串的宽度。
或者将字符串放在一个 Chunk 中并执行chunk.getWidthPoint()
接受的答案BaseFont.getWidthPoint
在 itext 5.5.4 中不起作用,因为该方法不再是静态的。即使它仍然存在,它也不会考虑正在使用的真实字体(它的系列或其粗体/斜体),因为它是静态的并且接收的参数有限。
chunk.getWidthPoint()
确实可以使用后面所述的真实字体,但对于某些用途来说,仅仅为宽度不断创建一个块是一种浪费,特别是如果该块不打算在以后使用。
这是chunk.getWidthPoint()
用作独立替代品的底层代码,假设您没有进行任何水平缩放:
font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());
我最终这样做是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
);