Docx4j create unordered / bullet list

I would like to create an unordered list with bullets using docx4j in a Word document. I found the following code that should do this work. But all I am trying to do is a generated list - this is a numbered list! I am using Word 2010, the German version and docx4j-2.8.1.

wordMLPackage = WordprocessingMLPackage.createPackage(); ObjectFactory factory = new org.docx4j.wml.ObjectFactory(); P p = factory.createP(); org.docx4j.wml.Text t = factory.createText(); t.setValue(text); org.docx4j.wml.R run = factory.createR(); run.getContent().add(t); p.getContent().add(run); org.docx4j.wml.PPr ppr = factory.createPPr(); p.setPPr(ppr); // Create and add <w:numPr> NumPr numPr = factory.createPPrBaseNumPr(); ppr.setNumPr(numPr); // The <w:ilvl> element Ilvl ilvlElement = factory.createPPrBaseNumPrIlvl(); numPr.setIlvl(ilvlElement); ilvlElement.setVal(BigInteger.valueOf(0)); // The <w:numId> element NumId numIdElement = factory.createPPrBaseNumPrNumId(); numPr.setNumId(numIdElement); numIdElement.setVal(BigInteger.valueOf(1)); wordMLPackage.getMainDocumentPart().addObject(p); 

Can someone help me create a real disordered, collapsed list ?!

+4
source share
2 answers

The code you posted says "Use list number 1, level 0".

Obviously, this list is a numbered list.

Look in your part of the numbering definition for a bulleted list and use it.

If you do not have a bulleted list, you need to add it. You can download the docx sample to the docx4j demo so that it creates relevant content for you. Or see ListHelper for an example of how this can be done.

0
source

Hope this helps you.

 import org.docx4j.XmlUtils; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.docx4j.openpackaging.parts.WordprocessingML.NumberingDefinitionsPart; import org.docx4j.wml.*; import javax.xml.bind.JAXBException; import java.io.File; import java.math.BigInteger; public class GenerateBulletedList { private static final String BULLET_TEMPLATE ="<w:numbering xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">" + "<w:abstractNum w:abstractNumId=\"0\">" + "<w:nsid w:val=\"12D402B7\"/>" + "<w:multiLevelType w:val=\"hybridMultilevel\"/>" + "<w:tmpl w:val=\"AECAFC2E\"/>" + "<w:lvl w:ilvl=\"0\" w:tplc=\"04090001\">" + "<w:start w:val=\"1\"/>" + "<w:numFmt w:val=\"bullet\"/>" + "<w:lvlText w:val=\"\uF0B7\"/>" + "<w:lvlJc w:val=\"left\"/>" + "<w:pPr>" + "<w:ind w:left=\"360\" w:hanging=\"360\"/>" + "</w:pPr>" + "<w:rPr>" + "<w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/>" + "</w:rPr>" + "</w:lvl>" + "</w:abstractNum>"+ "<w:num w:numId=\"1\">" + "<w:abstractNumId w:val=\"0\"/>" + "</w:num>" + "</w:numbering>"; public static void main(String[] args) throws Exception{ WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); createBulletedList(wordMLPackage); wordMLPackage.save(new File("Output.docx")); } private static void createBulletedList(WordprocessingMLPackage wordMLPackage)throws Exception{ NumberingDefinitionsPart ndp = new NumberingDefinitionsPart(); wordMLPackage.getMainDocumentPart().addTargetPart(ndp); ndp.setJaxbElement((Numbering) XmlUtils.unmarshalString(BULLET_TEMPLATE)); wordMLPackage.getMainDocumentPart().addObject(createParagraph("India")); wordMLPackage.getMainDocumentPart().addObject(createParagraph("United Kingdom")); wordMLPackage.getMainDocumentPart().addObject(createParagraph("France")); } private static P createParagraph(String country) throws JAXBException { ObjectFactory factory = new org.docx4j.wml.ObjectFactory(); P p = factory.createP(); String text = "<w:r xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">" + " <w:rPr>" + "<w:b/>" + " <w:rFonts w:ascii=\"Arial\" w:cs=\"Arial\"/><w:sz w:val=\"16\"/>" + " </w:rPr>" + "<w:t>" + country + "</w:t>" + "</w:r>"; R r = (R) XmlUtils.unmarshalString(text); org.docx4j.wml.R run = factory.createR(); run.getContent().add(r); p.getContent().add(run); org.docx4j.wml.PPr ppr = factory.createPPr(); p.setPPr(ppr); // Create and add <w:numPr> PPrBase.NumPr numPr = factory.createPPrBaseNumPr(); ppr.setNumPr(numPr); // The <w:numId> element PPrBase.NumPr.NumId numIdElement = factory.createPPrBaseNumPrNumId(); numPr.setNumId(numIdElement); numIdElement.setVal(BigInteger.valueOf(1)); return p; } } 
+1
source

Source: https://habr.com/ru/post/1486023/


All Articles