poi-tl获取目录所在页码
时间: 2023-07-21 18:31:03 浏览: 286
使用poi-tl动态写入目录更新问题解决
要获取POI-TL中目录所在页码,可以通过以下步骤实现:
1. 首先,需要获取到目录所在段落的起始页码,可以使用以下代码实现:
```java
XWPFDocument document = new XWPFDocument(new FileInputStream("sample.docx"));
XWPFParagraph tocParagraph = document.getParagraphs().get(0); // 假设目录在第1段
CTP ctp = tocParagraph.getCTP();
CTPPr pPr = ctp.getPPr();
CTPPrBase.NumPr numPr = pPr.getNumPr();
CTDecimalNumber abstractNumId = numPr.getAbstractNumId().getVal();
XWPFAbstractNum abstractNum = document.getAbstractNum(BigInteger.valueOf(abstractNumId.longValue()));
CTDecimalNumber level = numPr.getLvl().get(0).getIlvl();
// 获取到目录所在段落的起始页码
int tocStartPage = (int)tocParagraph.getDocument().getProperties().getExtendedProperties().getUnderlyingProperties().getPages();
```
2. 接下来,需要获取到目录所占的页数。可以通过以下代码实现:
```java
XWPFSDT content = tocParagraph.getBody().getOwner().getContent();
int tocPages = 0;
for (int i = content.indexOf(tocParagraph) + 1; i < content.size(); i++) {
IBodyElement element = content.get(i);
if (element instanceof XWPFParagraph) {
XWPFParagraph paragraph = (XWPFParagraph)element;
String text = paragraph.getText().trim();
if (text.startsWith("页码")) { // 假设目录中有一页码的信息
String[] parts = text.split("\\s+");
tocPages = Integer.parseInt(parts[1]) - tocStartPage + 1;
break;
}
}
}
```
3. 最后,目录所在页码可以通过以下代码计算得出:
```java
int tocPage = (int)Math.ceil((double)(tocStartPage + tocPages) / 2);
```
这里假设目录所占的页码数为偶数页时,目录所在页码为中间两页的后一页。如果目录所占页码数为奇数,目录所在页码为目录所在段落起始页码加上目录所占页码数的一半。
阅读全文