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

iText 2.7.1/iText 5.x中PdfContentByte.setLeading方法不生效求助

解决iText 2.x/5.x中PdfContentByte.setLeading()不生效的问题

PdfContentByte.setLeading()方法并非对所有文本绘制方式都生效——它只在通过newlineText()方法自动换行时才会应用设置的行间距。如果是手动调用setTextMatrix()定位文本,或者重复调用showText()直接绘制,这个设置会被忽略,自然看不到行间距效果。

下面提供两种可行的解决方式:

方式一:配合newlineText()使用setLeading()

如果你坚持直接操作PdfContentByte,必须遵循PDF文本绘制的流程,用newlineText()触发自动换行,让设置的leading生效:

PdfContentByte cb = writer.getDirectContent();
cb.beginText();
// 设置行间距为20
cb.setLeading(20f);
// 定位到起始坐标
cb.moveText(50, 750);
// 绘制第一行
cb.showText("第一行测试内容");
// 自动换行,应用设置的行间距
cb.newlineText();
// 绘制第二行
cb.showText("第二行测试内容");
cb.newlineText();
cb.showText("第三行测试内容");
cb.endText();

方式二:使用ColumnText(推荐)

直接操作PdfContentByte属于底层操作,容易出错。更推荐用ColumnText组件,它会自动处理行间距、换行和排版,用法更简洁:

ColumnText ct = new ColumnText(writer.getDirectContent());
// 设置文本显示的矩形区域(左、下、右、上坐标)
ct.setSimpleColumn(50, 700, 550, 750);
// 设置行间距
ct.setLeading(20f);
// 添加文本元素,Paragraph也可单独设置行间距
ct.addElement(new Paragraph("第一行测试内容"));
ct.addElement(new Paragraph("第二行测试内容"));
ct.addElement(new Paragraph("第三行测试内容"));
// 执行渲染
ct.go();

额外提示:如果使用Document对象直接添加Paragraph,也可以在创建Paragraph时指定行间距,比如new Paragraph("文本内容", font, 20f),添加到Document后会自动应用该间距。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:55:08