导入带有列表的模板样式:getNumberingDefinitionsPart()为WordprocessingMLPackage.createPackage()返回null

时间:2016-06-10 12:03:47

标签: docx4j

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

我可以从模板中正确提取样式和编号。 我可以应用样式但不能应用编号作为我的wordMLPackage.getMainDocumentPart()。getNumberingDefinitionsPart()返回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);

有人能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

查看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) );