Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
package org.docx4j.convert.out.html;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import javax.xml.bind.JAXBElement;
import org.docx4j.TraversalUtil;
import org.docx4j.finders.SdtFinder;
import org.docx4j.finders.TcFinder;
import org.docx4j.model.PropertyResolver;
import org.docx4j.model.listnumbering.AbstractListNumberingDefinition;
import org.docx4j.model.listnumbering.ListLevel;
import org.docx4j.model.listnumbering.ListNumberingDefinition;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.openpackaging.parts.WordprocessingML.NumberingDefinitionsPart;
import org.docx4j.openpackaging.parts.WordprocessingML.StyleDefinitionsPart;
import org.docx4j.wml.P;
import org.docx4j.wml.PPr;
import org.docx4j.wml.PPrBase.NumPr;
import org.docx4j.wml.SdtBlock;
import org.docx4j.wml.SdtContentBlock;
import org.docx4j.wml.SdtElement;
import org.docx4j.wml.SdtPr;
import org.docx4j.wml.Tag;
import org.docx4j.wml.Tbl;
import org.docx4j.wml.Tc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Create list items in OL or UL (as appropriate).
*
* We can't just use a LinkedList (stack) of list contexts,
* which we push and pop, since we have to write complete
* XML elements (as opposed to opening and closing tags).
*
* So this means either extending org.docx4j.model.structure.jaxb
* beyond sections, or some other approach, like wrapping
* list items in a content control. Let's try that.
*
* That's like org.docx4j.convert.out.common.preprocess.Containerization
*
* So we have a 2 step process:
*
* 1. insert the content controls
*
* 2. use an SdtWriter to turn these into UL or OL.
*
* This class does step 1.
*
* Step 2 is implemented by SdtToListSdtTagHandler; it will only be used if you invoke
* SdtWriter.registerTagHandler("HTML_ELEMENT", new SdtToListSdtTagHandler())
*
* @author jharrop
*
*/
public class ListsToContentControls {
public static Logger log = LoggerFactory.getLogger(ListsToContentControls.class);
public ListsToContentControls(WordprocessingMLPackage wmlPackage) {
this.wmlPackage = wmlPackage;
mainDocument = wmlPackage.getMainDocumentPart();
this.ndp=mainDocument.getNumberingDefinitionsPart();
stylesPart = wmlPackage.getMainDocumentPart().getStyleDefinitionsPart();
propertyResolver = wmlPackage.getMainDocumentPart().getPropertyResolver();
}
private WordprocessingMLPackage wmlPackage;
private MainDocumentPart mainDocument;
private NumberingDefinitionsPart ndp;
private StyleDefinitionsPart stylesPart;
private PropertyResolver propertyResolver;
private LinkedList listStack = null;
public static class ListSpec {
ListSpec(BigInteger numId, BigInteger ilvl) {
this.numId = numId;
this.ilvl = ilvl;
}
BigInteger ilvl;
BigInteger numId;
SdtBlock sdtList = null;
}
public static void process(WordprocessingMLPackage wmlPackage) {
//TODO: Convert to visitor behaviour here like TraversalUtil.visit with onlyBody = false
ListsToContentControls lc = new ListsToContentControls(wmlPackage);
if (lc.ndp==null) {
log.info("No NumberingDefinitionsPart, skipping");
return;
}
lc.process();
// try {
// wmlPackage.save(new File("cc.docx"));
// } catch (Docx4JException e) {
// e.printStackTrace();
// }
}
private void process() {
List