All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.deepoove.poi.policy.NumbericRenderPolicy Maven / Gradle / Ivy

package com.deepoove.poi.policy;

import java.math.BigInteger;
import java.util.List;

import org.apache.commons.lang3.tuple.Pair;
import org.apache.poi.xwpf.usermodel.NumberingWrapper;
import org.apache.poi.xwpf.usermodel.XWPFAbstractNum;
import org.apache.poi.xwpf.usermodel.XWPFNumbering;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat.Enum;

import com.deepoove.poi.NiceXWPFDocument;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.NumbericRenderData;
import com.deepoove.poi.data.TextRenderData;
import com.deepoove.poi.template.ElementTemplate;
import com.deepoove.poi.template.run.RunTemplate;
import com.deepoove.poi.util.StyleUtils;

/**
 * @author Sayi
 * @version 0.0.5 
 */
public class NumbericRenderPolicy implements RenderPolicy {

	@Override
	public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
		NiceXWPFDocument doc = template.getXWPFDocument();
		RunTemplate runTemplate = (RunTemplate) eleTemplate;
		XWPFRun run = runTemplate.getRun();
		if (null == data) return;

		NumbericRenderData numbericData = (NumbericRenderData) data;
		List datas = numbericData.getNumbers();
		Pair numFmt = numbericData.getNumFmt();
		if (datas == null || datas.isEmpty()) {
			runTemplate.getRun().setText("", 0);
			return;
		} else {

			XWPFNumbering numbering = doc.getNumbering();
			if (null == numbering) {
				numbering = doc.createNumbering();
			}

			NumberingWrapper numberingWrapper = new NumberingWrapper(numbering);
			CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();
			// if we have an existing document, we must determine the next
			// free number first.
			cTAbstractNum.setAbstractNumId(
					BigInteger.valueOf(numberingWrapper.getAbstractNumsSize() + 10));

			Enum fmt = numFmt.getLeft();
			String val = numFmt.getRight();
			CTLvl cTLvl = cTAbstractNum.addNewLvl();
			cTLvl.addNewNumFmt().setVal(fmt);
			cTLvl.addNewLvlText().setVal(val);
			cTLvl.addNewStart().setVal(BigInteger.valueOf(1));
			if (fmt == STNumberFormat.BULLET) {
				// cTLvl.setIlvl(BigInteger.valueOf(0));
				cTLvl.addNewLvlJc().setVal(STJc.LEFT);
			} else {
				// cTLvl.setIlvl(BigInteger.valueOf(0));
			}

			XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);
			BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);

			BigInteger numID = numbering.addNum(abstractNumID);
			// doc.insertNewParagraph(run);
			XWPFRun newRun;
			for (TextRenderData line : datas) {
				XWPFParagraph paragraph = doc.insertNewParagraph(run);
				paragraph.setNumID(numID);
				newRun = paragraph.createRun();
				StyleUtils.styleRun(newRun, line.getStyle());
				newRun.setText(line.getText());
			}
			// doc.insertNewParagraph(run);
		}
		runTemplate.getRun().setText("", 0);
	}
	
	

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy