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

如何用iText 7 Java绘制指定布局的PDF表格?

用iText 7 Java实现指定布局的PDF表格

目标布局

目标表格布局

当前代码问题

你当前的代码未遵循iText表格的行填充逻辑,导致跨行单元格位置混乱,生成结果不符合预期:
实际生成表格

修正后的代码

iText表格采用行优先填充规则,跨行单元格会占据对应行的列位置,后续单元格需在正确行位补充,确保每行单元格总列数匹配表格定义的列数(此处为4列)。以下是修正代码:

Table table = new Table(4);
table.setTextAlignment(TextAlignment.CENTER);
table.setBorder(Border.NO_BORDER);
table.setPadding(0);
table.useAllAvailableWidth();

// 第1行:1、2各占2行,3、4占1行
table.addCell(new Cell(2, 1).add(new Paragraph("1")));
table.addCell(new Cell(2, 1).add(new Paragraph("2")));
table.addCell(new Cell(1, 1).add(new Paragraph("3")));
table.addCell(new Cell(1, 1).add(new Paragraph("4")));

// 第2行:前2列被1、2占据,添加5、6各占2行
table.addCell(new Cell(2, 1).add(new Paragraph("5")));
table.addCell(new Cell(2, 1).add(new Paragraph("6")));

// 第3行:前2列被5、6占据,添加7、8各占2行
table.addCell(new Cell(2, 1).add(new Paragraph("7")));
table.addCell(new Cell(2, 1).add(new Paragraph("8")));

// 第4行:前2列被7、8占据,添加9、10各占2行
table.addCell(new Cell(2, 1).add(new Paragraph("9")));
table.addCell(new Cell(2, 1).add(new Paragraph("10")));

// 第5行:前2列被9、10占据,添加11、12各占2行
table.addCell(new Cell(2, 1).add(new Paragraph("11")));
table.addCell(new Cell(2, 1).add(new Paragraph("12")));

// 第6行:前2列被11、12占据,添加13、14各占2行
table.addCell(new Cell(2, 1).add(new Paragraph("13")));
table.addCell(new Cell(2, 1).add(new Paragraph("14")));

// 第7行:前2列被13、14占据,添加15、16各占2行
table.addCell(new Cell(2, 1).add(new Paragraph("15")));
table.addCell(new Cell(2, 1).add(new Paragraph("16")));

// 第8行:前2列被15、16占据,添加17、18各占2行
table.addCell(new Cell(2, 1).add(new Paragraph("17")));
table.addCell(new Cell(2, 1).add(new Paragraph("18")));

// 第9行:前2列被17、18占据,添加19、20各占2行
table.addCell(new Cell(2, 1).add(new Paragraph("19")));
table.addCell(new Cell(2, 1).add(new Paragraph("20")));

// 第10行:前2列被19、20占据,添加21、22各占1行
table.addCell(new Cell(1, 1).add(new Paragraph("21")));
table.addCell(new Cell(1, 1).add(new Paragraph("22")));

document.add(table);
document.close();

关键说明

  • 跨行单元格(Cell(2,1))会占据当前行和下一行的对应列位置,下一行无需重复填充该列单元格
  • 每行单元格总列数必须等于表格定义的列数(4列),iText会自动处理跨行单元格的位置对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:53:21