You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PDFBox按指定长度拆分文本并实现换行?

按指定长度拆分文本并换行绘制的解决方案

你当前的问题是重复绘制了完整的addressOffice字符串,导致输出重复全文。要实现按指定长度拆分文本后换行,需要先将文本拆分成多行,再逐行调整位置绘制。

调整后的代码示例

contentStream.beginText();
contentStream.setFont(font, 12);
// 设置初始绘制位置
contentStream.moveTextPositionByAmount(80, 160);

// 指定每行最大字符长度(根据你的需求设置,示例为17)
int maxLineLength = 17;
// 拆分文本为多行
String[] lines = splitTextByLength(addressOffice, maxLineLength);

// 逐行绘制并调整换行位置
for (int i = 0; i < lines.length; i++) {
    contentStream.drawString(lines[i]);
    // 非最后一行时执行换行偏移
    if (i != lines.length - 1) {
        contentStream.newLineAtOffset(-30, -15);
    }
}

contentStream.endText();

文本拆分工具方法

这个方法会按指定长度拆分文本,同时尽量在空格处截断,避免拆分单词:

private String[] splitTextByLength(String text, int maxLength) {
    List<String> lineList = new ArrayList<>();
    int currentStart = 0;
    int textLength = text.length();

    while (currentStart < textLength) {
        int currentEnd = Math.min(currentStart + maxLength, textLength);
        // 尝试在最近的空格处截断,避免破坏单词
        if (currentEnd < textLength && text.charAt(currentEnd) != ' ') {
            int lastSpaceIndex = text.lastIndexOf(' ', currentEnd);
            if (lastSpaceIndex > currentStart) {
                currentEnd = lastSpaceIndex;
            }
        }
        // 去除首尾空格后添加到列表
        lineList.add(text.substring(currentStart, currentEnd).trim());
        currentStart = currentEnd;
    }

    return lineList.toArray(new String[0]);
}

效果说明

替换你原有的重复绘制逻辑后,就能得到目标输出:

lorem ipsum dolor
sit amet

内容的提问来源于stack exchange,提问作者Kraken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 14:21:07