Java计算文本显示宽度
1、问题及解决方式
最近在工作中需要在后端计算出文本的宽度,生成svg文件后返回前端,查了下资料,可用以下代码计算文字宽度,再加上padding的宽度即可获得想要的显示效果:
String str = "Hello World!";
Font font = new Font("Microsoft YaHei", Font.PLAIN, 12);
FontRenderContext frc = new FontRenderContext(null, false, false);
int textwidth = (int)(font.getStringBounds(str, frc).getWidth());
System.out.println(textwidth);
2、相关说明
- Font
构造方法:
Font(String name, int style, int size)
用指定的字体名称、样式、大小创建字体对象。
getStringBounds()
:
Rectangle2D getStringBounds(String str, FontRenderContext frc)
返回指定文本的FontRenderContext的逻辑边界(Rectangle2D)。
- FontRenderContext
FontRenderContext
类是正确度量文本所需信息的容器,由于将轮廓映射到像素的规则以及应用程序提供的渲染点不同,文本的度量可能会有所差别。通常,FontRenderContext
的实例是从Graphics2D
对象获得的,直接构造的FontRenderContext
很可能不会表示任何实际的图形设备,并可能导致意外或不正确的结果。
构造方法:
FontRenderContext(AffineTransform tx, boolean isAntiAliased, boolean usesFractionalMetrics)
从一个可选的AffineTransform对象和两个boolean变量:是否抗锯齿值和使用小数度量标准来构造FontRenderContext对象。
- AffineTransform
AffineTransform类表示2D几何变换,其执行从2D坐标到其他2D坐标的线性映射,其保持线的”直线性”和”平行性”, 可以使用平移、缩放、翻转、旋转和剪切的顺序来构造几何变换。
- Rectangle2D
Rectangle2D类是存储2D矩形所有对象的抽象超类,描述了由位置(x,y)
和维度(w x h)
定义的矩形。