使用列表导入模板样式:getNumberingDefinitionsPart() return null for WordprocessingMLPackage.createPackage()

import template style with listing : getNumberingDefinitionsPart() return null for WordprocessingMLPackage.createPackage()

我在从 docx 模板导入样式时遇到了一些问题。 我想提取这些样式以将其应用到我的新文档中。 大多数都有编号。

我可以从模板中正确提取样式和编号。 我可以应用样式,但不能应用编号,因为我的 wordMLPackage.getMainDocumentPart().getNumberingDefinitionsPart() return null

如果我尝试不导入 NumberingDefinitionPart,我所有暗示带有数字列表的样式都会被视为没有数字的列表(这不是我想要的)。

我找不到实例化它的方法,也没有设置新实例的方法。 这是我的代码。

public class ModuleToDocxGenerator {
    private WordprocessingMLPackage wordMLPackage = null;
    private XHTMLImporter xHTMLImporter = null;
    private List<String> listStyle;
    private ProjectType project;
    private File file;
    private Map<String, Object> mapElement = new HashMap<>();
    private int taillePolice = 12;
    private final String police = "Arial";
    private Map<String, String> mapBookmark = new HashMap<>();
    private int compteurIDBookMark = 1;

    public void docxParser() {

        // Récupération des styles du template
        WordprocessingMLPackage wordMLPackage2 = null;
        try {
            wordMLPackage2 = WordprocessingMLPackage.load(new File("template.docx"));
        } catch (Docx4JException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {
            wordMLPackage = WordprocessingMLPackage.createPackage();
        } catch (InvalidFormatException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        MainDocumentPart tempDocPart = wordMLPackage2.getMainDocumentPart();
        //add Style part
        StyleDefinitionsPart sdp = tempDocPart.getStyleDefinitionsPart();
        Styles tempStyle = null;
        // Add numbering part
        NumberingDefinitionsPart ndp = tempDocPart.getNumberingDefinitionsPart();
        Numbering numbStyle = null;
        try {
            tempStyle = sdp.getContents();
            numbStyle=ndp.getContents();
        } catch (Docx4JException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        wordMLPackage.getMainDocumentPart().getNumberingDefinitionsPart().setJaxbElement(numbStyle);
        wordMLPackage.getMainDocumentPart().getStyleDefinitionsPart().setJaxbElement(tempStyle);

有人可以帮我吗?

看看https://github.com/plutext/docx4j/blob/master/src/samples/docx4j/org/docx4j/samples/NumberingRestart.java#L54

你需要这样的东西:

// Add numbering part
NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.setJaxbElement( (Numbering) XmlUtils.unmarshalString(initialNumbering) );