拼接分享到朋友圈的二维码图片中用到的,java awt里面的draw string不提供换行,只能自己手写。这里传入String类型的文本,返回String类型的list,每个element为一行的string。
/**
* 文本分行
* @param context 原文本
* @param windowWidth 文本框宽度
* @param windowHeight 文本框高度
* @param fontMetrics 文本字体格式
* @return 分行后的文本list
*/
private List<String> multiRows(String context, Integer windowWidth, Integer windowHeight, FontMetrics fontMetrics ){
Integer contextWidth = fontMetrics.stringWidth(context);
Integer fontHeight = fontMetrics.getHeight();
List<String> rowsContext = new ArrayList<>();
if (contextWidth < windowWidth && !context.contains("\n")){
rowsContext.add(context);
return rowsContext;
}else{
int row = 0;
int i = 0;
for (; i < context.length(); i ++){
if(fontHeight * row > windowHeight)
break;
while (i < context.length() && fontMetrics.stringWidth(context.substring(0,i)) <= windowWidth){
if (context.substring(i, i + 1).equals("\n")){
break;
}
i++;
}
if(i == context.length()){
break;
}
rowsContext.add(context.substring(0,i));
row ++;
if (i == context.length() - 1){
if (context.substring(i, i + 1).equals("\n")){
context = "";
break;
}else{
rowsContext.add(context.substring(i));
context = "";
break;
}
}else {
if(context.substring(i, i + 1).equals("\n")){
context = context.substring(i + 1);
}else {
context = context.substring(i);
}
}
i = 0;
}
if (StringUtils.isNotBlank(context) && fontHeight * row < windowHeight) {
rowsContext.add(context);
}
}
return rowsContext;
}