我使用Apache POI在Java中阅读Word文档,但我找不到任何创建部分,子部分等的引用。在Word文件中。此外,我正在尝试使用此添加部分的数量创建目录。我粘贴了一部分代码来向您展示我所做的事情:
public static void main(String[] args) throws FileNotFoundException, IOException {
File out = new File("POIExamlpe.docx");
XWPFDocument document = new XWPFDocument();
XWPFStyles styles = document.createStyles();
XWPFWordExtractor we = new XWPFWordExtractor(document);
System.out.println(we.getText());
//Create multilevel list in word with different styles, form the next level
CreateParagraph(document, styles, "First Level@@Second Level@@First Level@@Second Level@@Three Level@@Second Level@@Three Level@@Second Level@@First Level");
document.createTOC();
}
public static void CreateParagraph(XWPFDocument doc, XWPFStyles style,String content ){
for (String value : content.split("@@")) {
XWPFParagraph para = doc.createParagraph();
para.setVerticalAlignment(TextAlignment.CENTER);
para.setNumID(BigInteger.valueOf(1));
para.setStyle(heading1);
if (value.contains("Second")) { para.getCTP().getPPr().getNumPr().addNewIlvl().setVal(BigInteger.valueOf(1));
para.setStyle(heading2);
}
if(value.contains("Three")){ para.getCTP().getPPr().getNumPr().addNewIlvl().setVal(BigInteger.valueOf(2));
para.setStyle(heading4);
}
XWPFRun run = para.createRun();
}
我生成了这个document
但我希望生成类似this的内容。
答案 0 :(得分:1)
这是否有效取决于您的pip install textblob --user
。这必须包含POIExamlpe.docx
内的编号定义。例如:
\word\numberings.xml
您的代码行
<w:abstractNum w:abstractNumId="0">
<w:multiLevelType w:val="multilevel"/>
<w:lvl w:ilvl="0">
<w:start w:val="1"/>
<w:numFmt w:val="decimal"/>
<w:pStyle w:val="Heading1"/>
<w:lvlText w:val="%1"/>
<w:lvlJc w:val="left"/>
<w:pPr>
<w:ind w:hanging="432" w:left="432"/>
</w:pPr>
</w:lvl>
<w:lvl w:ilvl="1">
<w:start w:val="1"/>
<w:numFmt w:val="decimal"/>
<w:pStyle w:val="Heading2"/>
<w:lvlText w:val="%1.%2"/>
<w:lvlJc w:val="left"/>
<w:pPr>
<w:ind w:hanging="576" w:left="576"/>
</w:pPr>
</w:lvl>
<w:lvl w:ilvl="2">
<w:start w:val="1"/>
<w:numFmt w:val="decimal"/>
<w:pStyle w:val="Heading3"/>
<w:lvlText w:val="%1.%2.%3"/>
<w:lvlJc w:val="left"/>
<w:pPr>
<w:ind w:hanging="720" w:left="720"/>
</w:pPr>
</w:lvl>
</w:abstractNum>
<w:num w:numId="1">
<w:abstractNumId w:val="0"/>
</w:num>
是指para.setNumID(BigInteger.valueOf(1));
1,它引用定义编号的numID
0。
您的代码行
abstractNumId
指的是para.getCTP().getPPr().getNumPr().addNewIlvl().setVal(BigInteger.valueOf(1));
1,它定义了编号级别的样式。例如,在此级别ilvl
。
你怎么检查这个? <w:lvlText w:val="%1.%2"/>
文件只是一个*.docx
存档,包含ZIP
个文件和特殊目录结构中的其他文件。因此,您可以解压缩此XML
文件,并查看它。
要创建适当的模板,请创建一个新的*.docx
文档,使用其中所有需要的标题并对其进行编号。将文件另存为Word
。现在您可以删除内容并再次保存。现在解压缩此POIExamlpe.docx
文件并查看*.docx
。