如何用Apache POI在XWPFDocument中同级插入左表右文?
Apache POI实现表格居左+右侧文本布局的可行方案
你当前的代码之所以达不到预期,是因为默认创建的Word表格是块级元素,会占据整行宽度,后续插入的段落只能排在表格下方。要实现表格居左、文本在右侧的布局,需要将表格设置为浮动环绕模式,让文字可以在表格旁排列。
以下是具体实现代码:
import org.apache.poi.xwpf.usermodel.*; import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; import java.io.FileOutputStream; import java.io.IOException; import java.math.BigInteger; public class TableAndTextSideBySide { public static void main(String[] args) throws IOException { XWPFDocument document = new XWPFDocument(); // 创建表格 XWPFTable table = document.createTable(); XWPFTableRow tableRowOne = table.getRow(0); tableRowOne.getCell(0).setText("col one"); tableRowOne.addNewTableCell().setText("col two"); tableRowOne.addNewTableCell().setText("col three"); // 获取表格的属性对象,不存在则创建 CTTblPr tblPr = table.getCTTbl().getTblPr(); if (tblPr == null) { tblPr = table.getCTTbl().addNewTblPr(); } // 设置表格文字环绕类型为环绕型,允许文字在旁排列 CTTblWrap tblWrap = tblPr.addNewTblWrap(); tblWrap.setVal(STTblWrapType.SQUARE); // 设置表格对齐方式为左对齐 CTTblAlign tblAlign = tblPr.addNewTblAlign(); tblAlign.setVal(STTblAlign.LEFT); // 设置表格位置与文字环绕规则:左偏移0,允许文字在两侧环绕 CTTblPosition tblPosition = tblPr.addNewTblpPr(); tblPosition.addNewTblpLeft().setVal(0); tblPosition.addNewTblpTextWrap().setVal(STTblpTextWrapType.BOTH_SIDES); // 限制表格宽度,避免占满整行(单位:二十分之一磅) CTTblWidth tblWidth = tblPr.addNewTblW(); tblWidth.setW(BigInteger.valueOf(3000)); tblWidth.setType(STTblWidth.DXA); // 插入右侧文本段落 XWPFParagraph paragraph = document.createParagraph(); XWPFRun run = paragraph.createRun(); run.setText("Abstract: 这里是表格右侧的文本内容,可以换行、设置样式,文字会自动环绕在表格右侧排列"); run.setFontSize(12); // 输出文档 try (FileOutputStream out = new FileOutputStream("TableWithSideText.docx")) { document.write(out); } document.close(); } }
关键说明:
- CTTblWrap:设置表格的环绕模式,
SQUARE类型会让文字围绕表格边缘排列; - CTTblPosition:控制表格的位置与文字环绕方向,配合左对齐设置,最终实现文字在表格右侧展示;
- 表格宽度限制:必须手动指定表格宽度,否则表格会默认占满整行,右侧无法容纳文本;
- 无需复杂游标操作:设置好表格的环绕属性后,直接创建段落即可自动排列在表格右侧。
如果需要更精确的间距控制,可以通过CTTblpPr的TblpTop、TblpRight等属性调整表格与文字的偏移量。
内容的提问来源于stack exchange,提问作者BR4TO92
相关产品推荐
相关产品推荐

