利用Graphics2D合成图片文字,实现根据文本框自动换行

松英叡
2023-12-01
/**
 * 根据文本框宽度 作图
 * @param font 字体
 * @param content 内容
 * @param contentWidth 文本框宽度
 * @param contentHeight 文本框高度(未使用)
 * @param graphics 
 * @param x 绘制位置x
 * @param y 绘制位置y
 * @param color 文字颜色
 * @throws IOException
 */
public static void writeFont(Font font, String content, Integer contentWidth, Integer contentHeight, Graphics2D graphics, int x, int y, Color color) throws IOException {
    int rowWidth = 0;   //已用字当前行宽度
    int tempWidth;
    String lineString = "";
    List<String> contentLineList = new ArrayList<String>();
    List<Integer> contentLineWidth = new ArrayList<Integer>();
    FontDesignMetrics metrics = FontDesignMetrics.getMetrics(font);
    int fontHeight = metrics.getHeight();
    //每个新增字体宽度增加后如果超过文本框宽度就换行,没超过就不换行
    for(int i=0;i<content.length();i++){
        tempWidth = rowWidth;//存之前的情况
        rowWidth = rowWidth + metrics.charWidth(content.charAt(i));

        if(rowWidth > contentWidth){
            contentLineList.add(lineString);
            contentLineWidth.add(tempWidth);
            rowWidth = metrics.charWidth(content.charAt(i));
            lineString = "" + content.charAt(i);
        }else {
            lineString = lineString + content.charAt(i);
        }

        //最后一个字
        if(i == content.length()-1){
            contentLineList.add(lineString);
            contentLineWidth.add(rowWidth);
        }
    }
    graphics.setFont(font);
    graphics.setColor(color);
    //图片上写入每行文字  每行居中实现
    for(int i=0;i<contentLineList.size();i++){
        graphics.drawString(contentLineList.get(i), (contentWidth-contentLineWidth.get(i))/2 + x, fontHeight + i*fontHeight + y);
    }
}

做到了这个功能总觉得网上应该有,但是找了半天也没找到,自己实现了一下,没考虑到文本框宽度高度不够的情况,因为场景不会出现,代码写得没什么技术含量,仅提供思路

 

 类似资料: