docx4j如何设置段落间距及行间距
时间: 2023-05-26 20:06:06 浏览: 254
1. 段落间距设置:
docx4j提供了一个PPr类,表示段落属性,在这个类中,有一个Spacing类,它控制着段落的间距属性。使用以下代码可以设置段落间距:
```java
// 创建段落
P para = factory.createP();
// 获取段落的PPr属性
PPr ppr = para.getPPr();
if (ppr == null) {
ppr = factory.createPPr();
para.setPPr(ppr);
}
// 创建段落间距属性
Spacing spacing = ppr.getSpacing();
if (spacing == null) {
spacing = factory.createPPrBaseSpacing();
ppr.setSpacing(spacing);
}
// 设置段落间距,单位是磅
spacing.setAfter(BigInteger.valueOf(12));
spacing.setBefore(BigInteger.valueOf(12));
```
上面的代码创建了一个段落,然后通过para.getPPr()获取段落的PPr属性,如果不存在,则创建,然后获取PPr的Spacing属性,如果不存在也创建,最后设置after和before属性即可。
2. 行间距设置:
在设置行间距之前,需要先设置一个段落的行高。行高可以通过CTHeight类来控制,CTHeight中有一个属性val表示行高,单位是磅。设置行高后,就可以设置行间距了。行间距通过CTSectPr类来控制,CTSectPr中有一个属性pgSz表示页面大小,以及一个属性pgMar表示页面边距,通过它们可以计算行间距。使用以下代码可以设置行高和行间距:
```java
// 创建一个段落
P para = factory.createP();
// 设置行高,单位是磅
CTHeight h = new CTHeight();
h.setVal(BigInteger.valueOf(30));
para.setRPr(factory.createParaRPr());
para.getRPr().setHAnsi(h);
para.getRPr().setHAscii(h);
para.getRPr().setHCs(h);
// 设置行间距,单位是行高(倍数)
CTSectPr sectPr = objectFactory.createCTSectPr();
CTPgMar pgMar = sectPr.addNewPgMar();
pgMar.setLeft(BigInteger.valueOf(720L));
pgMar.setRight(BigInteger.valueOf(720L));
pgMar.setTop(BigInteger.valueOf(720L));
pgMar.setBottom(BigInteger.valueOf(720L));
CTPgSz pgSz = sectPr.addNewPgSz();
pgSz.setW(BigInteger.valueOf(11906L));
pgSz.setH(BigInteger.valueOf(16838L));
pgSz.setOrient(STPageOrientation.PORTRAIT);
CTPPr ctppr = para.getCTP().addNewPPr();
ctppr.setSectPr(sectPr);
ctppr.setSpacing(factory.createPPrBaseSpacing());
ctppr.getSpacing().setLine(BigInteger.valueOf(360L));
// 添加段落到文档中
wordMLPackage.getMainDocumentPart().addParagraphOfText("Hello, world!");
```
上面的代码先创建一个段落para,然后设置行高。接下来创建CTSectPr对象,设置页面边距和页面大小,最后设置行间距为2倍行高,并添加段落到文档中。
阅读全文