在Apache POI中设置段落缩进主要通过操作XWPFParagraph对象实现,以下是常用的五种方法及示例:
一、首行缩进(常用)
通过setFirstLineIndent()方法设置,参数单位为缇(twips)(1英寸=1440缇)。缩进2字符通常需400-600缇(约0.28-0.42英寸)。
代码示例:
java
Copy Code
XWPFParagraph paragraph = document.createParagraph();
paragraph.setFirstLineIndent(400); // 缩进约2字符
XWPFRun run = paragraph.createRun();
run.setText(“这是首行缩进的段落。”);
单位换算:1厘米≈567缇,2字符≈400-600缇 。
二、悬挂缩进
结合左缩进和首行负缩进实现:
设置整个段落左缩进:setIndentationLeft(800)
首行反向缩进:setFirstLineIndent(-400)
效果:首行突出,后续行内缩 。
三、整体左右缩进
左缩进:setIndentationLeft(int twips)
右缩进:setIndentationRight(int twips)
java
Copy Code
paragraph.setIndentationLeft(720); // 左缩进0.5英寸(720缇)
paragraph.setIndentationRight(1440); // 右缩进1英寸
适用于调整段落整体边距 。
四、通过列表级别控制缩进
使用setIndentFromLeft(int twips)或调整列表层级:
java
Copy Code
paragraph.getCTP().getPPr().getInd().setLeft(BigInteger.valueOf(720)); // XML底层操作
列表升级/降级时自动调整缩进(类似Word的“增加/减少列表级别”)。
五、样式继承法
修改文档默认样式,统一所有段落缩进:
java
Copy Code
XWPFStyles styles = document.getStyles();
CTStyle style = styles.getStyle(“Normal”).getCTStyle();
style.getRPr().getInd().setVal(BigInteger.valueOf(400)); // 全局首行缩进
适用于批量设置 。
⚠️ 注意事项:
单位精度:POI中1厘米≈567缇,建议通过UnitUtils.toTwips(0.5)转换英寸/厘米为缇值。
兼容性:直接操作XML(如getCTP().getPPr())可能破坏OOXML规范,优先使用POI封装方法。
综合应用:复杂缩进可组合使用上述方法,如悬挂缩进=左缩进+首行负缩进 。
代码示例完整流程:
java
Copy Code
XWPFDocument doc = new XWPFDocument();
XWPFParagraph p = doc.createParagraph();
p.setFirstLineIndent(400); // 首行缩进
p.setIndentationLeft(200); // 整体左缩进
XWPFRun run = p.createRun();
run.setText(“POI实现的复合缩进示例。”);