【发布时间】:2010-12-04 07:15:36
【问题描述】:
我正在使用 iText 编写 PDF。在某些情况下,我需要使用 SetVisibleSignature 函数对 PDF 进行签名。使用这个函数,我们需要指定要写入内容的矩形。
但我很难计算字符串的宽度,以便在 PDF 上设置签名之前设置矩形。
如何计算 iText 中的字符串宽度?
【问题讨论】:
标签: pdf pdf-generation itext text-width
我正在使用 iText 编写 PDF。在某些情况下,我需要使用 SetVisibleSignature 函数对 PDF 进行签名。使用这个函数,我们需要指定要写入内容的矩形。
但我很难计算字符串的宽度,以便在 PDF 上设置签名之前设置矩形。
如何计算 iText 中的字符串宽度?
【问题讨论】:
标签: pdf pdf-generation itext text-width
您可以使用BaseFont.getWidthPoint(String text, float fontSize) 来获取以pt 为单位的字符串的宽度。
或者将字符串放在一个 Chunk 中并执行chunk.getWidthPoint()
【讨论】:
getWidthPoint 如何知道假定的字体? x_X
接受的答案BaseFont.getWidthPoint,在 itext 5.5.4 中不起作用,因为该方法不再是静态的。即使它仍然存在,它也不会考虑所使用的真实字体(它的系列或粗体/斜体),因为它是静态的并且接收的参数有限。
chunk.getWidthPoint() 确实适用于后面所述的真实字体,但对于某些用途而言,仅为宽度不断创建块是一种浪费,尤其是如果该块不打算在以后使用时。
这是chunk.getWidthPoint() 用作独立替代品的底层代码,假设您没有进行任何水平缩放:
font.getCalculatedBaseFont(true).getWidthPoint(text, font.getCalculatedSize());
【讨论】:
我最终使用ColumnText.getWidth( Phrase phrase ) 来调整Phrase 的宽度,然后再使用ColumnText.showTextAligned 显示它。
在这个 sn-p 中,我使用了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
);
【讨论】: