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

Java中如何用iText 5.5.9将旋转90°的长文本拆分至两个矩形?

用iText 5.5.9实现旋转文本拆分到多个矩形

当然可以实现这个需求!你之前把文本渲染成模板再旋转的方式,没法处理超长文本的自动拆分。我们可以直接利用ColumnText的文本续排能力,配合画布旋转来实现顺时针90度的竖排文本拆分到两个矩形中,具体步骤如下:

核心思路

  1. 借助PdfContentByte的坐标变换,把整个画布顺时针旋转90度,后续添加的文本会自动变成竖排(和你之前用setRotationDegrees(-90)的效果一致)。
  2. 用ColumnText先填充第一个目标矩形,通过go()方法的返回状态判断是否还有剩余文本。
  3. 如果有未渲染的文本,再用ColumnText填充第二个矩形,实现文本的自动延续。

完整代码示例

final Document document = new Document(PageSize.A3);
document.setMargins(0f, 0f, 0f, 0f);
final PdfWriter pdfWriter = PdfWriter.getInstance(document, outputStream);
document.open();

final String text = "这里替换成你的超长文本内容...";
Font myFont = new Font(FontFamily.HELVETICA, 12);

// 获取PDF内容操作对象
PdfContentByte contentByte = pdfWriter.getDirectContent();

// 保存当前画布状态,后续恢复原始状态
contentByte.saveState();

// 执行顺时针90度的坐标变换
// 变换矩阵说明:实现顺时针旋转90度,同时调整原点适配A3页面布局
contentByte.concatCTM(0, 1, -1, 0, 0, document.getPageSize().getWidth());

// 定义旋转坐标系下的两个矩形(对应原始页面的竖排区域)
// 第一个矩形:对应原始页面中(0, 100)到(100, 700)的竖排区域
Rectangle rect1 = new Rectangle(100, 0, 700, 100);
// 第二个矩形:对应原始页面中(150, 100)到(250, 700)的竖排区域
Rectangle rect2 = new Rectangle(100, 150, 700, 250);

// 配置段落样式,和你之前的设置保持一致
Paragraph paragraph = new Paragraph(text, myFont);
paragraph.setAlignment(Element.ALIGN_JUSTIFIED);
paragraph.setLeading(0f, 1.2f);

// 初始化ColumnText并添加段落
ColumnText columnText = new ColumnText(contentByte);
columnText.addElement(paragraph);

// 填充第一个矩形
int status = columnText.setSimpleColumn(rect1);
status = columnText.go();

// 如果还有剩余文本,继续填充第二个矩形
if (ColumnText.hasMoreText(status)) {
    columnText.setSimpleColumn(rect2);
    columnText.go();
}

// 恢复画布原始状态
contentByte.restoreState();

document.close();

关键细节说明

  • 坐标变换:concatCTM(0, 1, -1, 0, 0, document.getPageSize().getWidth())这个变换矩阵实现了顺时针90度旋转,同时调整原点位置确保文本在页面上的布局符合预期。你可以根据自己的目标矩形位置,调整矩阵参数或矩形的坐标值。
  • 文本续排判断:ColumnText.go()方法会返回文本填充状态,通过ColumnText.hasMoreText(status)能快速判断是否还有未渲染的剩余文本,这是实现自动拆分的核心逻辑。
  • 方案优势:直接操作画布和ColumnText避免了将文本转成图片的损耗,同时天然支持文本的自动续排,不需要手动处理文本截断和拆分的复杂逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:52:28