Java中实现Word式段落两端对齐(避免最后一行强制对齐)
问题:Word两端对齐时最后一行被强制拉伸的解决办法
我使用Apache POI的XWPFParagraph设置ParagraphAlignment.BOTH实现Word文本两端对齐,但输出结果里最后一行也被强制拉伸,观感很差,请问该如何解决?
原代码
XWPFParagraph paragraph = document.createParagraph(); XWPFRun run = paragraph.createRun(); paragraph.setAlignment(ParagraphAlignment.BOTH); run.setText("...adding big text here..."); run.addBreak();
问题效果截图

解决方法
问题根源
ParagraphAlignment.BOTH对应Word的“两端对齐”,但它会强制拉伸所有行包括最后一行。要实现Word默认的两端对齐(最后一行左对齐),需要额外配置段落的对齐特殊属性。
修改后的代码
XWPFParagraph paragraph = document.createParagraph(); XWPFRun run = paragraph.createRun(); // 设置基础两端对齐 paragraph.setAlignment(ParagraphAlignment.BOTH); // 获取段落属性对象,配置最后一行左对齐 CTPPr pPr = paragraph.getCTP().getPPr(); if (pPr == null) { pPr = paragraph.getCTP().addNewPPr(); } CTJc jc = pPr.getJc(); if (jc == null) { jc = pPr.addNewJc(); } // 指定对齐类型为两端对齐,同时设置最后一行左对齐 jc.setVal(STJc.BOTH); jc.addNewLastLine().setVal(STJc.LEFT); run.setText("...adding big text here..."); run.addBreak();
原理说明
通过CTJc的lastLine属性明确指定最后一行采用左对齐,这样既保留了正文行的两端对齐效果,又避免最后一行被强制拉伸,和Word原生的两端对齐行为一致。
内容的提问来源于stack exchange,提问作者user5028394
相关产品推荐
相关产品推荐

