如何使用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
相关产品推荐
相关产品推荐

