使用列表导入模板样式: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);
有人可以帮我吗?
你需要这样的东西:
// Add numbering part
NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.setJaxbElement( (Numbering) XmlUtils.unmarshalString(initialNumbering) );
我在从 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);
有人可以帮我吗?
你需要这样的东西:
// Add numbering part
NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.setJaxbElement( (Numbering) XmlUtils.unmarshalString(initialNumbering) );