`
53873039oycg
  • 浏览: 823826 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

[简单]docx4j常用方法小结

 
阅读更多

        本代码基于docx4j-3.2.0,在office word 2007上测试通过。代码如下:

       

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.StringWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBElement;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.docx4j.TextUtils;
import org.docx4j.XmlUtils;
import org.docx4j.dml.wordprocessingDrawing.Inline;
import org.docx4j.model.properties.table.tr.TrHeight;
import org.docx4j.openpackaging.packages.OpcPackage;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.openpackaging.parts.relationships.Namespaces;
import org.docx4j.wml.BooleanDefaultTrue;
import org.docx4j.wml.Br;
import org.docx4j.wml.CTBackground;
import org.docx4j.wml.CTBorder;
import org.docx4j.wml.CTEm;
import org.docx4j.wml.CTHeight;
import org.docx4j.wml.CTLineNumber;
import org.docx4j.wml.CTShd;
import org.docx4j.wml.CTSignedHpsMeasure;
import org.docx4j.wml.CTSignedTwipsMeasure;
import org.docx4j.wml.CTTblCellMar;
import org.docx4j.wml.CTTextScale;
import org.docx4j.wml.CTVerticalAlignRun;
import org.docx4j.wml.CTVerticalJc;
import org.docx4j.wml.Color;
import org.docx4j.wml.ContentAccessor;
import org.docx4j.wml.Drawing;
import org.docx4j.wml.Highlight;
import org.docx4j.wml.HpsMeasure;
import org.docx4j.wml.Jc;
import org.docx4j.wml.JcEnumeration;
import org.docx4j.wml.ObjectFactory;
import org.docx4j.wml.P;
import org.docx4j.wml.P.Hyperlink;
import org.docx4j.wml.PPr;
import org.docx4j.wml.PPrBase.Ind;
import org.docx4j.wml.PPrBase.PBdr;
import org.docx4j.wml.PPrBase.Spacing;
import org.docx4j.wml.ParaRPr;
import org.docx4j.wml.R;
import org.docx4j.wml.RFonts;
import org.docx4j.wml.RPr;
import org.docx4j.wml.STBorder;
import org.docx4j.wml.STBrType;
import org.docx4j.wml.STEm;
import org.docx4j.wml.STLineNumberRestart;
import org.docx4j.wml.STLineSpacingRule;
import org.docx4j.wml.STPageOrientation;
import org.docx4j.wml.STShd;
import org.docx4j.wml.STVerticalAlignRun;
import org.docx4j.wml.STVerticalJc;
import org.docx4j.wml.SectPr;
import org.docx4j.wml.SectPr.PgBorders;
import org.docx4j.wml.SectPr.PgMar;
import org.docx4j.wml.SectPr.PgSz;
import org.docx4j.wml.SectPr.Type;
import org.docx4j.wml.Tbl;
import org.docx4j.wml.TblBorders;
import org.docx4j.wml.TblGrid;
import org.docx4j.wml.TblGridCol;
import org.docx4j.wml.TblPr;
import org.docx4j.wml.TblWidth;
import org.docx4j.wml.Tc;
import org.docx4j.wml.TcPr;
import org.docx4j.wml.TcPrInner.GridSpan;
import org.docx4j.wml.TcPrInner.HMerge;
import org.docx4j.wml.TcPrInner.VMerge;
import org.docx4j.wml.Text;
import org.docx4j.wml.TextDirection;
import org.docx4j.wml.Tr;
import org.docx4j.wml.TrPr;
import org.docx4j.wml.U;
import org.docx4j.wml.UnderlineEnumeration;

//代码基于docx4j-3.2.0
public class Docx4j_工具类_S3_Test {

	/*------------------------------------other---------------------------------------------------  */
	/**
	 * @Description:新增超链接
	 */
	public void createHyperlink(WordprocessingMLPackage wordMLPackage,
			MainDocumentPart mainPart, ObjectFactory factory, P paragraph,
			String url, String value, String cnFontName, String enFontName,
			String fontSize) throws Exception {
		if (StringUtils.isBlank(enFontName)) {
			enFontName = "Times New Roman";
		}
		if (StringUtils.isBlank(cnFontName)) {
			cnFontName = "微软雅黑";
		}
		if (StringUtils.isBlank(fontSize)) {
			fontSize = "22";
		}
		org.docx4j.relationships.ObjectFactory reFactory = new org.docx4j.relationships.ObjectFactory();
		org.docx4j.relationships.Relationship rel = reFactory
				.createRelationship();
		rel.setType(Namespaces.HYPERLINK);
		rel.setTarget(url);
		rel.setTargetMode("External");
		mainPart.getRelationshipsPart().addRelationship(rel);
		StringBuffer sb = new StringBuffer();
		// addRelationship sets the rel's @Id
		sb.append("<w:hyperlink r:id=\"");
		sb.append(rel.getId());
		sb.append("\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" ");
		sb.append("xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" >");
		sb.append("<w:r><w:rPr><w:rStyle w:val=\"Hyperlink\" />");
		sb.append("<w:rFonts  w:ascii=\"");
		sb.append(enFontName);
		sb.append("\"  w:hAnsi=\"");
		sb.append(enFontName);
		sb.append("\"  w:eastAsia=\"");
		sb.append(cnFontName);
		sb.append("\" w:hint=\"eastAsia\"/>");
		sb.append("<w:sz w:val=\"");
		sb.append(fontSize);
		sb.append("\"/><w:szCs w:val=\"");
		sb.append(fontSize);
		sb.append("\"/></w:rPr><w:t>");
		sb.append(value);
		sb.append("</w:t></w:r></w:hyperlink>");

		Hyperlink link = (Hyperlink) XmlUtils.unmarshalString(sb.toString());
		paragraph.getContent().add(link);
	}

	public String getElementContent(Object obj) throws Exception {
		StringWriter stringWriter = new StringWriter();
		TextUtils.extractText(obj, stringWriter);
		return stringWriter.toString();
	}

	/**
	 * @Description:得到指定类型的元素
	 */
	public static List<Object> getAllElementFromObject(Object obj,
			Class<?> toSearch) {
		List<Object> result = new ArrayList<Object>();
		if (obj instanceof JAXBElement)
			obj = ((JAXBElement<?>) obj).getValue();
		if (obj.getClass().equals(toSearch))
			result.add(obj);
		else if (obj instanceof ContentAccessor) {
			List<?> children = ((ContentAccessor) obj).getContent();
			for (Object child : children) {
				result.addAll(getAllElementFromObject(child, toSearch));
			}
		}
		return result;
	}

	/**
	 * @Description:保存WordprocessingMLPackage
	 */
	public void saveWordPackage(WordprocessingMLPackage wordPackage, File file)
			throws Exception {
		wordPackage.save(file);
	}

	/**
	 * @Description:新建WordprocessingMLPackage
	 */
	public WordprocessingMLPackage createWordprocessingMLPackage()
			throws Exception {
		return WordprocessingMLPackage.createPackage();
	}

	/**
	 * @Description:加载带密码WordprocessingMLPackage
	 */
	public WordprocessingMLPackage loadWordprocessingMLPackageWithPwd(
			String filePath, String password) throws Exception {
		OpcPackage opcPackage = WordprocessingMLPackage.load(new java.io.File(
				filePath), password);
		WordprocessingMLPackage wordMLPackage = (WordprocessingMLPackage) opcPackage;
		return wordMLPackage;
	}

	/**
	 * @Description:加载WordprocessingMLPackage
	 */
	public WordprocessingMLPackage loadWordprocessingMLPackage(String filePath)
			throws Exception {
		WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage
				.load(new java.io.File(filePath));
		return wordMLPackage;
	}

	/*------------------------------------Word 表格相关---------------------------------------------------  */
	/**
	 * @Description: 跨列合并
	 */
	public void mergeCellsHorizontalByGridSpan(Tbl tbl, int row, int fromCell,
			int toCell) {
		if (row < 0 || fromCell < 0 || toCell < 0) {
			return;
		}
		List<Tr> trList = getTblAllTr(tbl);
		if (row > trList.size()) {
			return;
		}
		Tr tr = trList.get(row);
		List<Tc> tcList = getTrAllCell(tr);
		for (int cellIndex = Math.min(tcList.size() - 1, toCell); cellIndex >= fromCell; cellIndex--) {
			Tc tc = tcList.get(cellIndex);
			TcPr tcPr = getTcPr(tc);
			if (cellIndex == fromCell) {
				GridSpan gridSpan = tcPr.getGridSpan();
				if (gridSpan == null) {
					gridSpan = new GridSpan();
					tcPr.setGridSpan(gridSpan);
				}
				gridSpan.setVal(BigInteger.valueOf(Math.min(tcList.size() - 1,
						toCell) - fromCell + 1));
			} else {
				tr.getContent().remove(cellIndex);
			}
		}
	}

	/**
	 * @Description: 跨列合并
	 */
	public void mergeCellsHorizontal(Tbl tbl, int row, int fromCell, int toCell) {
		if (row < 0 || fromCell < 0 || toCell < 0) {
			return;
		}
		List<Tr> trList = getTblAllTr(tbl);
		if (row > trList.size()) {
			return;
		}
		Tr tr = trList.get(row);
		List<Tc> tcList = getTrAllCell(tr);
		for (int cellIndex = fromCell, len = Math
				.min(tcList.size() - 1, toCell); cellIndex <= len; cellIndex++) {
			Tc tc = tcList.get(cellIndex);
			TcPr tcPr = getTcPr(tc);
			HMerge hMerge = tcPr.getHMerge();
			if (hMerge == null) {
				hMerge = new HMerge();
				tcPr.setHMerge(hMerge);
			}
			if (cellIndex == fromCell) {
				hMerge.setVal("restart");
			} else {
				hMerge.setVal("continue");
			}
		}
	}

	/**
	 * @Description: 跨行合并
	 */
	public void mergeCellsVertically(Tbl tbl, int col, int fromRow, int toRow) {
		if (col < 0 || fromRow < 0 || toRow < 0) {
			return;
		}
		for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) {
			Tc tc = getTc(tbl, rowIndex, col);
			if (tc == null) {
				break;
			}
			TcPr tcPr = getTcPr(tc);
			VMerge vMerge = tcPr.getVMerge();
			if (vMerge == null) {
				vMerge = new VMerge();
				tcPr.setVMerge(vMerge);
			}
			if (rowIndex == fromRow) {
				vMerge.setVal("restart");
			} else {
				vMerge.setVal("continue");
			}
		}
	}

	/**
	 * @Description:得到指定位置的单元格
	 */
	public Tc getTc(Tbl tbl, int row, int cell) {
		if (row < 0 || cell < 0) {
			return null;
		}
		List<Tr> trList = getTblAllTr(tbl);
		if (row >= trList.size()) {
			return null;
		}
		List<Tc> tcList = getTrAllCell(trList.get(row));
		if (cell >= tcList.size()) {
			return null;
		}
		return tcList.get(cell);
	}

	/**
	 * @Description:得到所有表格
	 */
	public List<Tbl> getAllTbl(WordprocessingMLPackage wordMLPackage) {
		MainDocumentPart mainDocPart = wordMLPackage.getMainDocumentPart();
		List<Object> objList = getAllElementFromObject(mainDocPart, Tbl.class);
		if (objList == null) {
			return null;
		}
		List<Tbl> tblList = new ArrayList<Tbl>();
		for (Object obj : objList) {
			if (obj instanceof Tbl) {
				Tbl tbl = (Tbl) obj;
				tblList.add(tbl);
			}
		}
		return tblList;
	}

	/**
	 * @Description:删除指定位置的表格,删除后表格数量减一
	 */
	public boolean removeTableByIndex(WordprocessingMLPackage wordMLPackage,
			int index) throws Exception {
		boolean flag = false;
		if (index < 0) {
			return flag;
		}
		List<Object> objList = wordMLPackage.getMainDocumentPart().getContent();
		if (objList == null) {
			return flag;
		}
		int k = -1;
		for (int i = 0, len = objList.size(); i < len; i++) {
			Object obj = XmlUtils.unwrap(objList.get(i));
			if (obj instanceof Tbl) {
				k++;
				if (k == index) {
					wordMLPackage.getMainDocumentPart().getContent().remove(i);
					flag = true;
					break;
				}
			}
		}
		return flag;
	}

	/**
	 * @Description: 获取单元格内容,无分割符
	 */
	public String getTblContentStr(Tbl tbl) throws Exception {
		return getElementContent(tbl);
	}


	/**
	 * @Description: 获取表格内容
	 */
	public List<String> getTblContentList(Tbl tbl) throws Exception {
		List<String> resultList = new ArrayList<String>();
		List<Tr> trList = getTblAllTr(tbl);
		for (Tr tr : trList) {
			StringBuffer sb = new StringBuffer();
			List<Tc> tcList = getTrAllCell(tr);
			for (Tc tc : tcList) {
				sb.append(getElementContent(tc) + ",");
			}
			resultList.add(sb.toString());
		}
		return resultList;
	}

	public TblPr getTblPr(Tbl tbl) {
		TblPr tblPr = tbl.getTblPr();
		if (tblPr == null) {
			tblPr = new TblPr();
			tbl.setTblPr(tblPr);
		}
		return tblPr;
	}

	/**
	 * @Description: 设置表格总宽度
	 */
	public void setTableWidth(Tbl tbl, String width) {
		if (StringUtils.isNotBlank(width)) {
			TblPr tblPr = getTblPr(tbl);
			TblWidth tblW = tblPr.getTblW();
			if (tblW == null) {
				tblW = new TblWidth();
				tblPr.setTblW(tblW);
			}
			tblW.setW(new BigInteger(width));
			tblW.setType("dxa");
		}
	}

	/**
	 * @Description:创建表格(默认水平居中,垂直居中)
	 */
	public Tbl createTable(WordprocessingMLPackage wordPackage, int rowNum,
			int colsNum) throws Exception {
		colsNum = Math.max(1, colsNum);
		rowNum = Math.max(1, rowNum);
		int widthTwips = getWritableWidth(wordPackage);
		int colWidth = widthTwips / colsNum;
		int[] widthArr = new int[colsNum];
		for (int i = 0; i < colsNum; i++) {
			widthArr[i] = colWidth;
		}
		return createTable(rowNum, colsNum, widthArr);
	}

	/**
	 * @Description:创建表格(默认水平居中,垂直居中)
	 */
	public Tbl createTable(int rowNum, int colsNum, int[] widthArr)
			throws Exception {
		colsNum = Math.max(1, Math.min(colsNum, widthArr.length));
		rowNum = Math.max(1, rowNum);
		Tbl tbl = new Tbl();
		StringBuffer tblSb = new StringBuffer();
		tblSb.append("<w:tblPr ").append(Namespaces.W_NAMESPACE_DECLARATION)
				.append(">");
		tblSb.append("<w:tblStyle w:val=\"TableGrid\"/>");
		tblSb.append("<w:tblW w:w=\"0\" w:type=\"auto\"/>");
		// 上边框
		tblSb.append("<w:tblBorders>");
		tblSb.append("<w:top w:val=\"single\" w:sz=\"1\" w:space=\"0\" w:color=\"auto\"/>");
		// 左边框
		tblSb.append("<w:left w:val=\"single\" w:sz=\"1\" w:space=\"0\" w:color=\"auto\"/>");
		// 下边框
		tblSb.append("<w:bottom w:val=\"single\" w:sz=\"1\" w:space=\"0\" w:color=\"auto\"/>");
		// 右边框
		tblSb.append("<w:right w:val=\"single\" w:sz=\"1\" w:space=\"0\" w:color=\"auto\"/>");
		tblSb.append("<w:insideH w:val=\"single\" w:sz=\"1\" w:space=\"0\" w:color=\"auto\"/>");
		tblSb.append("<w:insideV w:val=\"single\" w:sz=\"1\" w:space=\"0\" w:color=\"auto\"/>");
		tblSb.append("</w:tblBorders>");
		tblSb.append("</w:tblPr>");
		TblPr tblPr = null;
		tblPr = (TblPr) XmlUtils.unmarshalString(tblSb.toString());
		Jc jc = new Jc();
		// 单元格居中对齐
		jc.setVal(JcEnumeration.CENTER);
		tblPr.setJc(jc);

		tbl.setTblPr(tblPr);

		// 设定各单元格宽度
		TblGrid tblGrid = new TblGrid();
		tbl.setTblGrid(tblGrid);
		for (int i = 0; i < colsNum; i++) {
			TblGridCol gridCol = new TblGridCol();
			gridCol.setW(BigInteger.valueOf(widthArr[i]));
			tblGrid.getGridCol().add(gridCol);
		}
		// 新增行
		for (int j = 0; j < rowNum; j++) {
			Tr tr = new Tr();
			tbl.getContent().add(tr);
			// 列
			for (int i = 0; i < colsNum; i++) {
				Tc tc = new Tc();
				tr.getContent().add(tc);

				TcPr tcPr = new TcPr();
				TblWidth cellWidth = new TblWidth();
				cellWidth.setType("dxa");
				cellWidth.setW(BigInteger.valueOf(widthArr[i]));
				tcPr.setTcW(cellWidth);
				tc.setTcPr(tcPr);

				// 垂直居中
				setTcVAlign(tc, STVerticalJc.CENTER);
				P p = new P();
				PPr pPr = new PPr();
				pPr.setJc(jc);
				p.setPPr(pPr);
				R run = new R();
				p.getContent().add(run);
				tc.getContent().add(p);
			}
		}
		return tbl;
	}

	/**
	 * @Description:表格增加边框 可以设置上下左右四个边框样式以及横竖水平线样式
	 */
	public void setTblBorders(TblPr tblPr, CTBorder topBorder,
			CTBorder rightBorder, CTBorder bottomBorder, CTBorder leftBorder,
			CTBorder hBorder, CTBorder vBorder) {
		TblBorders borders = tblPr.getTblBorders();
		if (borders == null) {
			borders = new TblBorders();
			tblPr.setTblBorders(borders);
		}
		if (topBorder != null) {
			borders.setTop(topBorder);
		}
		if (rightBorder != null) {
			borders.setRight(rightBorder);
		}
		if (bottomBorder != null) {
			borders.setBottom(bottomBorder);
		}
		if (leftBorder != null) {
			borders.setLeft(leftBorder);
		}
		if (hBorder != null) {
			borders.setInsideH(hBorder);
		}
		if (vBorder != null) {
			borders.setInsideV(vBorder);
		}
	}

	/**
	 * @Description: 设置表格水平对齐方式(仅对表格起作用,单元格不一定水平对齐)
	 */
	public void setTblJcAlign(Tbl tbl, JcEnumeration jcType) {
		if (jcType != null) {
			TblPr tblPr = getTblPr(tbl);
			Jc jc = tblPr.getJc();
			if (jc == null) {
				jc = new Jc();
				tblPr.setJc(jc);
			}
			jc.setVal(jcType);
		}
	}

	/**
	 * @Description: 设置表格水平对齐方式(包括单元格),只对该方法前面产生的单元格起作用
	 */
	public void setTblAllJcAlign(Tbl tbl, JcEnumeration jcType) {
		if (jcType != null) {
			setTblJcAlign(tbl, jcType);
			List<Tr> trList = getTblAllTr(tbl);
			for (Tr tr : trList) {
				List<Tc> tcList = getTrAllCell(tr);
				for (Tc tc : tcList) {
					setTcJcAlign(tc, jcType);
				}
			}
		}
	}

	/**
	 * @Description: 设置表格垂直对齐方式(包括单元格),只对该方法前面产生的单元格起作用
	 */
	public void setTblAllVAlign(Tbl tbl, STVerticalJc vAlignType) {
		if (vAlignType != null) {
			List<Tr> trList = getTblAllTr(tbl);
			for (Tr tr : trList) {
				List<Tc> tcList = getTrAllCell(tr);
				for (Tc tc : tcList) {
					setTcVAlign(tc, vAlignType);
				}
			}
		}
	}

	/**
	 * @Description: 设置单元格Margin
	 */
	public void setTableCellMargin(Tbl tbl, String top, String right,
			String bottom, String left) {
		TblPr tblPr = getTblPr(tbl);
		CTTblCellMar cellMar = tblPr.getTblCellMar();
		if (cellMar == null) {
			cellMar = new CTTblCellMar();
			tblPr.setTblCellMar(cellMar);
		}
		if (StringUtils.isNotBlank(top)) {
			TblWidth topW = new TblWidth();
			topW.setW(new BigInteger(top));
			topW.setType("dxa");
			cellMar.setTop(topW);
		}
		if (StringUtils.isNotBlank(right)) {
			TblWidth rightW = new TblWidth();
			rightW.setW(new BigInteger(right));
			rightW.setType("dxa");
			cellMar.setRight(rightW);
		}
		if (StringUtils.isNotBlank(bottom)) {
			TblWidth btW = new TblWidth();
			btW.setW(new BigInteger(bottom));
			btW.setType("dxa");
			cellMar.setBottom(btW);
		}
		if (StringUtils.isNotBlank(left)) {
			TblWidth leftW = new TblWidth();
			leftW.setW(new BigInteger(left));
			leftW.setType("dxa");
			cellMar.setLeft(leftW);
		}
	}

	/**
	 * @Description: 得到表格所有的行
	 */
	public List<Tr> getTblAllTr(Tbl tbl) {
		List<Object> objList = getAllElementFromObject(tbl, Tr.class);
		List<Tr> trList = new ArrayList<Tr>();
		if (objList == null) {
			return trList;
		}
		for (Object obj : objList) {
			if (obj instanceof Tr) {
				Tr tr = (Tr) obj;
				trList.add(tr);
			}
		}
		return trList;

	}

	/**
	 * @Description:设置tr高度
	 */
	public void setTrHeight(Tr tr, String heigth) {
		TrPr trPr = getTrPr(tr);
		CTHeight ctHeight = new CTHeight();
		ctHeight.setVal(new BigInteger(heigth));
		TrHeight trHeight = new TrHeight(ctHeight);
		trHeight.set(trPr);
	}

	/**
	 * @Description: 在表格指定位置新增一行,默认居中
	 */
	public void addTrByIndex(Tbl tbl, int index) {
		addTrByIndex(tbl, index, STVerticalJc.CENTER, JcEnumeration.CENTER);
	}

	/**
	 * @Description: 在表格指定位置新增一行(默认按表格定义的列数添加)
	 */
	public void addTrByIndex(Tbl tbl, int index, STVerticalJc vAlign,
			JcEnumeration hAlign) {
		TblGrid tblGrid = tbl.getTblGrid();
		Tr tr = new Tr();
		if (tblGrid != null) {
			List<TblGridCol> gridList = tblGrid.getGridCol();
			for (TblGridCol tblGridCol : gridList) {
				Tc tc = new Tc();
				setTcWidth(tc, tblGridCol.getW().toString());
				if (vAlign != null) {
					// 垂直居中
					setTcVAlign(tc, vAlign);
				}
				P p = new P();
				if (hAlign != null) {
					PPr pPr = new PPr();
					Jc jc = new Jc();
					// 单元格居中对齐
					jc.setVal(hAlign);
					pPr.setJc(jc);
					p.setPPr(pPr);
				}
				R run = new R();
				p.getContent().add(run);
				tc.getContent().add(p);
				tr.getContent().add(tc);
			}
		} else {
			// 大部分情况都不会走到这一步
			Tr firstTr = getTblAllTr(tbl).get(0);
			int cellSize = getTcCellSizeWithMergeNum(firstTr);
			for (int i = 0; i < cellSize; i++) {
				Tc tc = new Tc();
				if (vAlign != null) {
					// 垂直居中
					setTcVAlign(tc, vAlign);
				}
				P p = new P();
				if (hAlign != null) {
					PPr pPr = new PPr();
					Jc jc = new Jc();
					// 单元格居中对齐
					jc.setVal(hAlign);
					pPr.setJc(jc);
					p.setPPr(pPr);
				}
				R run = new R();
				p.getContent().add(run);
				tc.getContent().add(p);
				tr.getContent().add(tc);
			}
		}
		if (index >= 0&&index<tbl.getContent().size()) {
			tbl.getContent().add(index, tr);
		} else {
			tbl.getContent().add(tr);
		}
	}

	
	/**
	 * @Description: 得到行的列数
	 */
	public int getTcCellSizeWithMergeNum(Tr tr) {
		int cellSize = 1;
		List<Tc> tcList = getTrAllCell(tr);
		if (tcList == null || tcList.size() == 0) {
			return cellSize;
		}
		cellSize = tcList.size();
		for (Tc tc : tcList) {
			TcPr tcPr = getTcPr(tc);
			GridSpan gridSpan = tcPr.getGridSpan();
			if (gridSpan != null) {
				cellSize += gridSpan.getVal().intValue() - 1;
			}
		}
		return cellSize;
	}

	/**
	 * @Description: 删除指定行 删除后行数减一
	 */
	public boolean removeTrByIndex(Tbl tbl, int index) {
		boolean flag = false;
		if (index < 0) {
			return flag;
		}
		List<Object> objList = tbl.getContent();
		if (objList == null) {
			return flag;
		}
		int k = -1;
		for (int i = 0, len = objList.size(); i < len; i++) {
			Object obj = XmlUtils.unwrap(objList.get(i));
			if (obj instanceof Tr) {
				k++;
				if (k == index) {
					tbl.getContent().remove(i);
					flag = true;
					break;
				}
			}
		}
		return flag;
	}

	public TrPr getTrPr(Tr tr) {
		TrPr trPr = tr.getTrPr();
		if (trPr == null) {
			trPr = new TrPr();
			tr.setTrPr(trPr);
		}
		return trPr;
	}

	/**
	 * @Description:隐藏行(只对表格中间的部分起作用,不包括首尾行)
	 */
	public void setTrHidden(Tr tr, boolean hidden) {
		List<Tc> tcList = getTrAllCell(tr);
		for (Tc tc : tcList) {
			setTcHidden(tc, hidden);
		}
	}

	/**
	 * @Description: 设置单元格宽度
	 */
	public void setTcWidth(Tc tc, String width) {
		if (StringUtils.isNotBlank(width)) {
			TcPr tcPr = getTcPr(tc);
			TblWidth tcW = tcPr.getTcW();
			if (tcW == null) {
				tcW = new TblWidth();
				tcPr.setTcW(tcW);
			}
			tcW.setW(new BigInteger(width));
			tcW.setType("dxa");
		}
	}

	/**
	 * @Description: 隐藏单元格内容
	 */
	public void setTcHidden(Tc tc, boolean hidden) {
		List<P> pList = getTcAllP(tc);
		for (P p : pList) {
			PPr ppr = getPPr(p);
			List<Object> objRList = getAllElementFromObject(p, R.class);
			if (objRList == null) {
				continue;
			}
			for (Object objR : objRList) {
				if (objR instanceof R) {
					R r = (R) objR;
					RPr rpr = getRPr(r);
					setRPrVanishStyle(rpr, hidden);
				}
			}
			setParaVanish(ppr, hidden);
		}
	}

	public List<P> getTcAllP(Tc tc) {
		List<Object> objList = getAllElementFromObject(tc, P.class);
		List<P> pList = new ArrayList<P>();
		if (objList == null) {
			return pList;
		}
		for (Object obj : objList) {
			if (obj instanceof P) {
				P p = (P) obj;
				pList.add(p);
			}
		}
		return pList;
	}

	public TcPr getTcPr(Tc tc) {
		TcPr tcPr = tc.getTcPr();
		if (tcPr == null) {
			tcPr = new TcPr();
			tc.setTcPr(tcPr);
		}
		return tcPr;
	}

	/**
	 * @Description: 设置单元格垂直对齐方式
	 */
	public void setTcVAlign(Tc tc, STVerticalJc vAlignType) {
		if (vAlignType != null) {
			TcPr tcPr = getTcPr(tc);
			CTVerticalJc vAlign = new CTVerticalJc();
			vAlign.setVal(vAlignType);
			tcPr.setVAlign(vAlign);
		}
	}

	/**
	 * @Description: 设置单元格水平对齐方式
	 */
	public void setTcJcAlign(Tc tc, JcEnumeration jcType) {
		if (jcType != null) {
			List<P> pList = getTcAllP(tc);
			for (P p : pList) {
				setParaJcAlign(p, jcType);
			}
		}
	}

	public RPr getRPr(R r) {
		RPr rpr = r.getRPr();
		if (rpr == null) {
			rpr = new RPr();
			r.setRPr(rpr);
		}
		return rpr;
	}

	/**
	 * @Description: 获取所有的单元格
	 */
	public List<Tc> getTrAllCell(Tr tr) {
		List<Object> objList = getAllElementFromObject(tr, Tc.class);
		List<Tc> tcList = new ArrayList<Tc>();
		if (objList == null) {
			return tcList;
		}
		for (Object tcObj : objList) {
			if (tcObj instanceof Tc) {
				Tc objTc = (Tc) tcObj;
				tcList.add(objTc);
			}
		}
		return tcList;
	}

	/**
	 * @Description: 获取单元格内容
	 */
	public String getTcContent(Tc tc) throws Exception {
		return getElementContent(tc);
	}

	/**
	 * @Description:设置单元格内容,content为null则清除单元格内容
	 */
	public void setTcContent(Tc tc, RPr rpr, String content) {
		List<Object> pList = tc.getContent();
		P p = null;
		if (pList != null && pList.size() > 0) {
			if (pList.get(0) instanceof P) {
				p = (P) pList.get(0);
			}
		} else {
			p = new P();
			tc.getContent().add(p);
		}
		R run = null;
		List<Object> rList = p.getContent();
		if (rList != null && rList.size() > 0) {
			for (int i = 0, len = rList.size(); i < len; i++) {
				// 清除内容(所有的r
				p.getContent().remove(0);
			}
		}
		run = new R();
		p.getContent().add(run);
		if (content != null) {
			String[] contentArr = content.split("\n");
			Text text = new Text();
			text.setSpace("preserve");
			text.setValue(contentArr[0]);
			run.setRPr(rpr);
			run.getContent().add(text);

			for (int i = 1, len = contentArr.length; i < len; i++) {
				Br br = new Br();
				run.getContent().add(br);// 换行
				text = new Text();
				text.setSpace("preserve");
				text.setValue(contentArr[i]);
				run.setRPr(rpr);
				run.getContent().add(text);
			}
		}
	}

	/**
	 * @Description:设置单元格内容,content为null则清除单元格内容
	 */
	public void removeTcContent(Tc tc) {
		List<Object> pList = tc.getContent();
		P p = null;
		if (pList != null && pList.size() > 0) {
			if (pList.get(0) instanceof P) {
				p = (P) pList.get(0);
			}
		} else {
			return;
		}
		List<Object> rList = p.getContent();
		if (rList != null && rList.size() > 0) {
			for (int i = 0, len = rList.size(); i < len; i++) {
				// 清除内容(所有的r
				p.getContent().remove(0);
			}
		}
	}

	/**
	 * @Description:删除指定位置的表格
	 * @deprecated
	 */
	public void deleteTableByIndex2(WordprocessingMLPackage wordMLPackage,
			int index) throws Exception {
		if (index < 0) {
			return;
		}
		final String xpath = "(//w:tbl)[" + index + "]";
		final List<Object> jaxbNodes = wordMLPackage.getMainDocumentPart()
				.getJAXBNodesViaXPath(xpath, true);
		if (jaxbNodes != null && jaxbNodes.size() > 0) {
			wordMLPackage.getMainDocumentPart().getContent()
					.remove(jaxbNodes.get(0));
		}
	}

	/**
	 * @Description:获取NodeList
	 * @deprecated
	 */
	public List<Object> getObjectByXpath(WordprocessingMLPackage wordMLPackage,
			String xpath) throws Exception {
		final List<Object> jaxbNodes = wordMLPackage.getMainDocumentPart()
				.getJAXBNodesViaXPath(xpath, true);
		return jaxbNodes;
	}

	/*------------------------------------Word 段落相关---------------------------------------------------  */
	/**
	 * @Description: 只删除单独的段落,不包括表格内或其他内的段落
	 */
	public boolean removeParaByIndex(WordprocessingMLPackage wordMLPackage,
			int index) {
		boolean flag = false;
		if (index < 0) {
			return flag;
		}
		List<Object> objList = wordMLPackage.getMainDocumentPart().getContent();
		if (objList == null) {
			return flag;
		}
		int k = -1;
		for (int i = 0, len = objList.size(); i < len; i++) {
			if (objList.get(i) instanceof P) {
				k++;
				if (k == index) {
					wordMLPackage.getMainDocumentPart().getContent().remove(i);
					flag = true;
					break;
				}
			}
		}
		return flag;
	}

	/**
	 * @Description: 设置段落水平对齐方式
	 */
	public void setParaJcAlign(P paragraph, JcEnumeration hAlign) {
		if (hAlign != null) {
			PPr pprop = paragraph.getPPr();
			if (pprop == null) {
				pprop = new PPr();
				paragraph.setPPr(pprop);
			}
			Jc align = new Jc();
			align.setVal(hAlign);
			pprop.setJc(align);
		}
	}

	/**
	 * @Description: 设置段落内容
	 */
	public void setParaRContent(P p, RPr runProperties, String content) {
		R run = null;
		List<Object> rList = p.getContent();
		if (rList != null && rList.size() > 0) {
			for (int i = 0, len = rList.size(); i < len; i++) {
				// 清除内容(所有的r
				p.getContent().remove(0);
			}
		}
		run = new R();
		p.getContent().add(run);
		if (content != null) {
			String[] contentArr = content.split("\n");
			Text text = new Text();
			text.setSpace("preserve");
			text.setValue(contentArr[0]);
			run.setRPr(runProperties);
			run.getContent().add(text);

			for (int i = 1, len = contentArr.length; i < len; i++) {
				Br br = new Br();
				run.getContent().add(br);// 换行
				text = new Text();
				text.setSpace("preserve");
				text.setValue(contentArr[i]);
				run.setRPr(runProperties);
				run.getContent().add(text);
			}
		}
	}

	/**
	 * @Description: 添加段落内容
	 */
	public void appendParaRContent(P p, RPr runProperties, String content) {
		if (content != null) {
			R run = new R();
			p.getContent().add(run);
			String[] contentArr = content.split("\n");
			Text text = new Text();
			text.setSpace("preserve");
			text.setValue(contentArr[0]);
			run.setRPr(runProperties);
			run.getContent().add(text);

			for (int i = 1, len = contentArr.length; i < len; i++) {
				Br br = new Br();
				run.getContent().add(br);// 换行
				text = new Text();
				text.setSpace("preserve");
				text.setValue(contentArr[i]);
				run.setRPr(runProperties);
				run.getContent().add(text);
			}
		}
	}

	/**
	 * @Description: 添加图片到段落
	 */
	public void addImageToPara(WordprocessingMLPackage wordMLPackage,
			ObjectFactory factory, P paragraph, String filePath,
			String content, RPr rpr, String altText, int id1, int id2)
			throws Exception {
		R run = factory.createR();
		if (content != null) {
			Text text = factory.createText();
			text.setValue(content);
			text.setSpace("preserve");
			run.setRPr(rpr);
			run.getContent().add(text);
		}

		InputStream is = new FileInputStream(filePath);
		byte[] bytes = IOUtils.toByteArray(is);
		BinaryPartAbstractImage imagePart = BinaryPartAbstractImage
				.createImagePart(wordMLPackage, bytes);
		Inline inline = imagePart.createImageInline(filePath, altText, id1,
				id2, false);
		Drawing drawing = factory.createDrawing();
		drawing.getAnchorOrInline().add(inline);
		run.getContent().add(drawing);
		paragraph.getContent().add(run);
	}

	/**
	 * @Description: 段落添加Br 页面Break(分页符)
	 */
	public void addPageBreak(P para, STBrType sTBrType) {
		Br breakObj = new Br();
		breakObj.setType(sTBrType);
		para.getContent().add(breakObj);
	}

	/**
	 * @Description: 设置段落是否禁止行号(禁止用于当前行号)
	 */
	public void setParagraphSuppressLineNum(P p) {
		PPr ppr = getPPr(p);
		BooleanDefaultTrue line = ppr.getSuppressLineNumbers();
		if (line == null) {
			line = new BooleanDefaultTrue();
		}
		line.setVal(true);
		ppr.setSuppressLineNumbers(line);
	}

	/**
	 * @Description: 设置段落底纹(对整段文字起作用)
	 */
	public void setParagraphShdStyle(P p, STShd shdType, String shdColor) {
		PPr ppr = getPPr(p);
		CTShd ctShd = ppr.getShd();
		if (ctShd == null) {
			ctShd = new CTShd();
		}
		if (StringUtils.isNotBlank(shdColor)) {
			ctShd.setColor(shdColor);
		}
		if (shdType != null) {
			ctShd.setVal(shdType);
		}
		ppr.setShd(ctShd);
	}

	/**
	 * @param isSpace
	 *            是否设置段前段后值
	 * @param before
	 *            段前磅数
	 * @param after
	 *            段后磅数
	 * @param beforeLines
	 *            段前行数
	 * @param afterLines
	 *            段后行数
	 * @param isLine
	 *            是否设置行距
	 * @param lineValue
	 *            行距值
	 * @param sTLineSpacingRule
	 *            自动auto 固定exact 最小 atLeast 1磅=20 1行=100 单倍行距=240
	 */
	public void setParagraphSpacing(P p, boolean isSpace, String before,
			String after, String beforeLines, String afterLines,
			boolean isLine, String lineValue,
			STLineSpacingRule sTLineSpacingRule) {
		PPr pPr = getPPr(p);
		Spacing spacing = pPr.getSpacing();
		if (spacing == null) {
			spacing = new Spacing();
			pPr.setSpacing(spacing);
		}
		if (isSpace) {
			if (StringUtils.isNotBlank(before)) {
				// 段前磅数
				spacing.setBefore(new BigInteger(before));
			}
			if (StringUtils.isNotBlank(after)) {
				// 段后磅数
				spacing.setAfter(new BigInteger(after));
			}
			if (StringUtils.isNotBlank(beforeLines)) {
				// 段前行数
				spacing.setBeforeLines(new BigInteger(beforeLines));
			}
			if (StringUtils.isNotBlank(afterLines)) {
				// 段后行数
				spacing.setAfterLines(new BigInteger(afterLines));
			}
		}
		if (isLine) {
			if (StringUtils.isNotBlank(lineValue)) {
				spacing.setLine(new BigInteger(lineValue));
			}
			if (sTLineSpacingRule != null) {
				spacing.setLineRule(sTLineSpacingRule);
			}
		}
	}

	/**
	 * @Description: 设置段落缩进信息 1厘米≈567
	 */
	public void setParagraphIndInfo(P p, String firstLine,
			String firstLineChar, String hanging, String hangingChar,
			String right, String rigthChar, String left, String leftChar) {
		PPr ppr = getPPr(p);
		Ind ind = ppr.getInd();
		if (ind == null) {
			ind = new Ind();
			ppr.setInd(ind);
		}
		if (StringUtils.isNotBlank(firstLine)) {
			ind.setFirstLine(new BigInteger(firstLine));
		}
		if (StringUtils.isNotBlank(firstLineChar)) {
			ind.setFirstLineChars(new BigInteger(firstLineChar));
		}
		if (StringUtils.isNotBlank(hanging)) {
			ind.setHanging(new BigInteger(hanging));
		}
		if (StringUtils.isNotBlank(hangingChar)) {
			ind.setHangingChars(new BigInteger(hangingChar));
		}
		if (StringUtils.isNotBlank(left)) {
			ind.setLeft(new BigInteger(left));
		}
		if (StringUtils.isNotBlank(leftChar)) {
			ind.setLeftChars(new BigInteger(leftChar));
		}
		if (StringUtils.isNotBlank(right)) {
			ind.setRight(new BigInteger(right));
		}
		if (StringUtils.isNotBlank(rigthChar)) {
			ind.setRightChars(new BigInteger(rigthChar));
		}
	}

	public PPr getPPr(P p) {
		PPr ppr = p.getPPr();
		if (ppr == null) {
			ppr = new PPr();
			p.setPPr(ppr);
		}
		return ppr;
	}

	public ParaRPr getParaRPr(PPr ppr) {
		ParaRPr parRpr = ppr.getRPr();
		if (parRpr == null) {
			parRpr = new ParaRPr();
			ppr.setRPr(parRpr);
		}
		return parRpr;

	}

	public void setParaVanish(PPr ppr, boolean isVanish) {
		ParaRPr parRpr = getParaRPr(ppr);
		BooleanDefaultTrue vanish = parRpr.getVanish();
		if (vanish != null) {
			vanish.setVal(isVanish);
		} else {
			vanish = new BooleanDefaultTrue();
			parRpr.setVanish(vanish);
			vanish.setVal(isVanish);
		}
	}

	/**
	 * @Description: 设置段落边框样式
	 */
	public void setParagraghBorders(P p, CTBorder topBorder,
			CTBorder bottomBorder, CTBorder leftBorder, CTBorder rightBorder) {
		PPr ppr = getPPr(p);
		PBdr pBdr = new PBdr();
		if (topBorder != null) {
			pBdr.setTop(topBorder);
		}
		if (bottomBorder != null) {
			pBdr.setBottom(bottomBorder);
		}
		if (leftBorder != null) {
			pBdr.setLeft(leftBorder);
		}
		if (rightBorder != null) {
			pBdr.setRight(rightBorder);
		}
		ppr.setPBdr(pBdr);
	}

	/**
	 * @Description: 设置字体信息
	 */
	public void setFontStyle(RPr runProperties, String cnFontFamily,
			String enFontFamily, String fontSize, String color) {
		setFontFamily(runProperties, cnFontFamily, enFontFamily);
		setFontSize(runProperties, fontSize);
		setFontColor(runProperties, color);
	}

	/**
	 * @Description: 设置字体大小
	 */
	public void setFontSize(RPr runProperties, String fontSize) {
		if (StringUtils.isNotBlank(fontSize)) {
			HpsMeasure size = new HpsMeasure();
			size.setVal(new BigInteger(fontSize));
			runProperties.setSz(size);
			runProperties.setSzCs(size);
		}
	}

	/**
	 * @Description: 设置字体
	 */
	public void setFontFamily(RPr runProperties, String cnFontFamily,
			String enFontFamily) {
		if (StringUtils.isNotBlank(cnFontFamily)
				|| StringUtils.isNotBlank(enFontFamily)) {
			RFonts rf = runProperties.getRFonts();
			if (rf == null) {
				rf = new RFonts();
				runProperties.setRFonts(rf);
			}
			if (cnFontFamily != null) {
				rf.setEastAsia(cnFontFamily);
			}
			if (enFontFamily != null) {
				rf.setAscii(enFontFamily);
			}
		}
	}

	/**
	 * @Description: 设置字体颜色
	 */
	public void setFontColor(RPr runProperties, String color) {
		if (color != null) {
			Color c = new Color();
			c.setVal(color);
			runProperties.setColor(c);
		}
	}

	/**
	 * @Description: 设置字符边框
	 */
	public void addRPrBorderStyle(RPr runProperties, String size,
			STBorder bordType, String space, String color) {
		CTBorder value = new CTBorder();
		if (StringUtils.isNotBlank(color)) {
			value.setColor(color);
		}
		if (StringUtils.isNotBlank(size)) {
			value.setSz(new BigInteger(size));
		}
		if (StringUtils.isNotBlank(space)) {
			value.setSpace(new BigInteger(space));
		}
		if (bordType != null) {
			value.setVal(bordType);
		}
		runProperties.setBdr(value);
	}

	/**
	 * @Description:着重号
	 */
	public void addRPrEmStyle(RPr runProperties, STEm emType) {
		if (emType != null) {
			CTEm em = new CTEm();
			em.setVal(emType);
			runProperties.setEm(em);
		}
	}

	/**
	 * @Description: 空心
	 */
	public void addRPrOutlineStyle(RPr runProperties) {
		BooleanDefaultTrue outline = new BooleanDefaultTrue();
		outline.setVal(true);
		runProperties.setOutline(outline);
	}

	/**
	 * @Description: 设置上标下标
	 */
	public void addRPrcaleStyle(RPr runProperties, STVerticalAlignRun vAlign) {
		if (vAlign != null) {
			CTVerticalAlignRun value = new CTVerticalAlignRun();
			value.setVal(vAlign);
			runProperties.setVertAlign(value);
		}
	}

	/**
	 * @Description: 设置字符间距缩进
	 */
	public void addRPrScaleStyle(RPr runProperties, int indent) {
		CTTextScale value = new CTTextScale();
		value.setVal(indent);
		runProperties.setW(value);
	}

	/**
	 * @Description: 设置字符间距信息
	 */
	public void addRPrtSpacingStyle(RPr runProperties, int spacing) {
		CTSignedTwipsMeasure value = new CTSignedTwipsMeasure();
		value.setVal(BigInteger.valueOf(spacing));
		runProperties.setSpacing(value);
	}

	/**
	 * @Description: 设置文本位置
	 */
	public void addRPrtPositionStyle(RPr runProperties, int position) {
		CTSignedHpsMeasure ctPosition = new CTSignedHpsMeasure();
		ctPosition.setVal(BigInteger.valueOf(position));
		runProperties.setPosition(ctPosition);
	}

	/**
	 * @Description: 阴文
	 */
	public void addRPrImprintStyle(RPr runProperties) {
		BooleanDefaultTrue imprint = new BooleanDefaultTrue();
		imprint.setVal(true);
		runProperties.setImprint(imprint);
	}

	/**
	 * @Description: 阳文
	 */
	public void addRPrEmbossStyle(RPr runProperties) {
		BooleanDefaultTrue emboss = new BooleanDefaultTrue();
		emboss.setVal(true);
		runProperties.setEmboss(emboss);
	}

	/**
	 * @Description: 设置隐藏
	 */
	public void setRPrVanishStyle(RPr runProperties, boolean isVanish) {
		BooleanDefaultTrue vanish = runProperties.getVanish();
		if (vanish != null) {
			vanish.setVal(isVanish);
		} else {
			vanish = new BooleanDefaultTrue();
			vanish.setVal(isVanish);
			runProperties.setVanish(vanish);
		}
	}

	/**
	 * @Description: 设置阴影
	 */
	public void addRPrShadowStyle(RPr runProperties) {
		BooleanDefaultTrue shadow = new BooleanDefaultTrue();
		shadow.setVal(true);
		runProperties.setShadow(shadow);
	}

	/**
	 * @Description: 设置底纹
	 */
	public void addRPrShdStyle(RPr runProperties, STShd shdtype) {
		if (shdtype != null) {
			CTShd shd = new CTShd();
			shd.setVal(shdtype);
			runProperties.setShd(shd);
		}
	}

	/**
	 * @Description: 设置突出显示文本
	 */
	public void addRPrHightLightStyle(RPr runProperties, String hightlight) {
		if (StringUtils.isNotBlank(hightlight)) {
			Highlight highlight = new Highlight();
			highlight.setVal(hightlight);
			runProperties.setHighlight(highlight);
		}
	}

	/**
	 * @Description: 设置删除线样式
	 */
	public void addRPrStrikeStyle(RPr runProperties, boolean isStrike,
			boolean isDStrike) {
		// 删除线
		if (isStrike) {
			BooleanDefaultTrue strike = new BooleanDefaultTrue();
			strike.setVal(true);
			runProperties.setStrike(strike);
		}
		// 双删除线
		if (isDStrike) {
			BooleanDefaultTrue dStrike = new BooleanDefaultTrue();
			dStrike.setVal(true);
			runProperties.setDstrike(dStrike);
		}
	}

	/**
	 * @Description: 加粗
	 */
	public void addRPrBoldStyle(RPr runProperties) {
		BooleanDefaultTrue b = new BooleanDefaultTrue();
		b.setVal(true);
		runProperties.setB(b);
	}

	/**
	 * @Description: 倾斜
	 */
	public void addRPrItalicStyle(RPr runProperties) {
		BooleanDefaultTrue b = new BooleanDefaultTrue();
		b.setVal(true);
		runProperties.setI(b);
	}

	/**
	 * @Description: 添加下划线
	 */
	public void addRPrUnderlineStyle(RPr runProperties,
			UnderlineEnumeration enumType) {
		U val = new U();
		val.setVal(enumType);
		runProperties.setU(val);
	}

	/*------------------------------------Word 相关---------------------------------------------------  */
	/**
	 * @Description: 设置分节符 nextPage:下一页 continuous:连续 evenPage:偶数页 oddPage:奇数页
	 */
	public void setDocSectionBreak(WordprocessingMLPackage wordPackage,
			String sectValType) {
		if (StringUtils.isNotBlank(sectValType)) {
			SectPr sectPr = getDocSectPr(wordPackage);
			Type sectType = sectPr.getType();
			if (sectType == null) {
				sectType = new Type();
				sectPr.setType(sectType);
			}
			sectType.setVal(sectValType);
		}
	}

	/**
	 * @Description: 设置页面背景色
	 */
	public void setDocumentBackGround(WordprocessingMLPackage wordPackage,
			ObjectFactory factory, String color) throws Exception {
		MainDocumentPart mdp = wordPackage.getMainDocumentPart();
		CTBackground bkground = mdp.getContents().getBackground();
		if (StringUtils.isNotBlank(color)) {
			if (bkground == null) {
				bkground = factory.createCTBackground();
				bkground.setColor(color);
			}
			mdp.getContents().setBackground(bkground);
		}
	}

	/**
	 * @Description: 设置页面边框
	 */
	public void setDocumentBorders(WordprocessingMLPackage wordPackage,
			ObjectFactory factory, CTBorder top, CTBorder right,
			CTBorder bottom, CTBorder left) {
		SectPr sectPr = getDocSectPr(wordPackage);
		PgBorders pgBorders = sectPr.getPgBorders();
		if (pgBorders == null) {
			pgBorders = factory.createSectPrPgBorders();
			sectPr.setPgBorders(pgBorders);
		}
		if (top != null) {
			pgBorders.setTop(top);
		}
		if (right != null) {
			pgBorders.setRight(right);
		}
		if (bottom != null) {
			pgBorders.setBottom(bottom);
		}
		if (left != null) {
			pgBorders.setLeft(left);
		}
	}

	/**
	 * @Description: 设置页面大小及纸张方向 landscape横向
	 */
	public void setDocumentSize(WordprocessingMLPackage wordPackage,
			ObjectFactory factory, String width, String height,
			STPageOrientation stValue) {
		SectPr sectPr = getDocSectPr(wordPackage);
		PgSz pgSz = sectPr.getPgSz();
		if (pgSz == null) {
			pgSz = factory.createSectPrPgSz();
			sectPr.setPgSz(pgSz);
		}
		if (StringUtils.isNotBlank(width)) {
			pgSz.setW(new BigInteger(width));
		}
		if (StringUtils.isNotBlank(height)) {
			pgSz.setH(new BigInteger(height));
		}
		if (stValue != null) {
			pgSz.setOrient(stValue);
		}
	}

	public SectPr getDocSectPr(WordprocessingMLPackage wordPackage) {
		SectPr sectPr = wordPackage.getDocumentModel().getSections().get(0)
				.getSectPr();
		return sectPr;
	}

	/**
	 * @Description:设置页边距
	 */
	public void setDocMarginSpace(WordprocessingMLPackage wordPackage,
			ObjectFactory factory, String top, String left, String bottom,
			String right) {
		SectPr sectPr = getDocSectPr(wordPackage);
		PgMar pg = sectPr.getPgMar();
		if (pg == null) {
			pg = factory.createSectPrPgMar();
			sectPr.setPgMar(pg);
		}
		if (StringUtils.isNotBlank(top)) {
			pg.setTop(new BigInteger(top));
		}
		if (StringUtils.isNotBlank(bottom)) {
			pg.setBottom(new BigInteger(bottom));
		}
		if (StringUtils.isNotBlank(left)) {
			pg.setLeft(new BigInteger(left));
		}
		if (StringUtils.isNotBlank(right)) {
			pg.setRight(new BigInteger(right));
		}
	}

	/**
	 * @Description: 设置行号
	 * @param distance
	 *            :距正文距离 1厘米=567
	 * @param start
	 *            :起始编号(0开始)
	 * @param countBy
	 *            :行号间隔
	 * @param restartType
	 *            :STLineNumberRestart.CONTINUOUS(continuous连续编号)<br/>
	 *            STLineNumberRestart.NEW_PAGE(每页重新编号)<br/>
	 *            STLineNumberRestart.NEW_SECTION(每节重新编号)
	 */
	public void setDocInNumType(WordprocessingMLPackage wordPackage,
			String countBy, String distance, String start,
			STLineNumberRestart restartType) {
		SectPr sectPr = getDocSectPr(wordPackage);
		CTLineNumber lnNumType = sectPr.getLnNumType();
		if (lnNumType == null) {
			lnNumType = new CTLineNumber();
			sectPr.setLnNumType(lnNumType);
		}
		if (StringUtils.isNotBlank(countBy)) {
			lnNumType.setCountBy(new BigInteger(countBy));
		}
		if (StringUtils.isNotBlank(distance)) {
			lnNumType.setDistance(new BigInteger(distance));
		}
		if (StringUtils.isNotBlank(start)) {
			lnNumType.setStart(new BigInteger(start));
		}
		if (restartType != null) {
			lnNumType.setRestart(restartType);
		}
	}

	/**
	 * @Description:设置文字方向 tbRl 垂直
	 */
	public void setDocTextDirection(WordprocessingMLPackage wordPackage,
			String textDirection) {
		if (StringUtils.isNotBlank(textDirection)) {
			SectPr sectPr = getDocSectPr(wordPackage);
			TextDirection textDir = sectPr.getTextDirection();
			if (textDir == null) {
				textDir = new TextDirection();
				sectPr.setTextDirection(textDir);
			}
			textDir.setVal(textDirection);
		}
	}

	/**
	 * @Description:设置word 垂直对齐方式(Word默认方式都是"顶端对齐")
	 */
	public void setDocVAlign(WordprocessingMLPackage wordPackage,
			STVerticalJc valignType) {
		if (valignType != null) {
			SectPr sectPr = getDocSectPr(wordPackage);
			CTVerticalJc valign = sectPr.getVAlign();
			if (valign == null) {
				valign = new CTVerticalJc();
				sectPr.setVAlign(valign);
			}
			valign.setVal(valignType);
		}
	}

	/**
	 * @Description:获取文档的可用宽度
	 */
	public int getWritableWidth(WordprocessingMLPackage wordPackage)
			throws Exception {
		return wordPackage.getDocumentModel().getSections().get(0)
				.getPageDimensions().getWritableWidthTwips();
	}

}

 

        请尊重本人的劳动成果,转载请注明出处,本文原始链接:http://53873039oycg.iteye.com/blog/2194479   ,谢谢。

 

     有什么问题可以留言。 

 

2
1
分享到:
评论
3 楼 jahentao 2016-10-30  
感动,google不到创建表格的代码,终于找到楼主封装好了的工具类了。
2 楼 xiaoy123 2015-05-24  
楼主解决我大问题,支持啊
1 楼 yangsong158 2015-03-21  
好文章必需支持。

相关推荐

    docx4j-3.3.5-API文档-中英对照版.zip

    赠送jar包:docx4j-3.3.5.jar; 赠送原API文档:docx4j-3.3.5-javadoc.jar; 赠送源代码:docx4j-3.3.5-sources.jar; 赠送Maven依赖信息文件:docx4j-3.3.5.pom; 包含翻译后的API文档:docx4j-3.3.5-javadoc-API...

    docx4j-3.3.5-API文档-中文版.zip

    赠送jar包:docx4j-3.3.5.jar; 赠送原API文档:docx4j-3.3.5-javadoc.jar; 赠送源代码:docx4j-3.3.5-sources.jar; 赠送Maven依赖信息文件:docx4j-3.3.5.pom; 包含翻译后的API文档:docx4j-3.3.5-javadoc-API...

    DOCX4J jar包

    docx4j 用的jar包,docx4j学习网址:http://www.docx4java.org/trac/docx4j

    最新 docx4j-master

    最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master最新 docx4j-master...

    docx4j及其依赖包

    docx4j支持操作后缀.docx得word文档,替换书签,获取文档内容,稳定资源

    docx4j操作word

    docx4j操作word,主要使用docx4j对word进行操作,比如chart图表、标签替换、目录等。

    docx4j相关jar包

    docx4j运行需要的jar包,这里是整理好的所有必须的jar包

    利用docx4j实现docx转pdf

    利用docx4j实现docx转pdf小dome

    docx4j所需jar包全

    docx4j所需jar包整合,其中word转pdf,word转html,word中docx转doc,java代码实现,都可以使用,仅限学习参考使用。

    java实现多个docx文档合并(基于docx4j)

    java实现word的合并,jdk版本1.7,直接导入eclipse中即可。基于docx4j3.3.3实现。内含所有jar包,MargeDoc中含有主方法

    用docx4j操作word书签,在word书签中插入文本

    用docx4j,jar出去word书签,在word书签中插入文本 源码可以通过以下链接查看: https://github.com/xulp-mzl/xlp-core https://github.com/xulp-mzl/xlp-third ...实例: public static void main(String[] args) ...

    使用docx4j 技术操作word的读写

    使用docx4J技术操作word的读写,使用docx4J技术操作word的读写,

    docx4j生成word文档

    最近在做一个出卷系统,需要通过试卷模板从数据库中抽取题目,然后按照模板的样式生成完整的试卷,包括试卷格式的排版和图片的写入。这是用docx4j生成word文档。里面包括完整代码和所需jar包。

    docx4j-3.3.6

    What is docx4j? docx4j is an open source (Apache v2) library for creating, editing, and saving OpenXML "packages", including docx, pptx, and xslx. It uses JAXB to create the Java representation. ...

    利用docx4j向docx文件中指定书签位置添加图片,包含相关jar包和demo

    代码很短,但是找jar包找的欲仙欲死,包括commons-io-1.4.jar,commons-logging-1.1.1.jar,docx4j-3.3.3.jar,freemarker.jar,google-collections.jar,log4j-1.2.8.jar,slf4j-api-1.7.12.jar,slf4j-log4j12-...

    docx4j api

    docx4j api 帮助文档 word导出必备 学习必备

    docx4J 文件源代码 docx4J 2.2.2 source files

    docx4J 文件源代码 docx4J source files docx4j is an open source Java library for manipulating OpenXML WordprocessingML documents, released under the Apache software licence. docx is the default file ...

    docx4j相关资料

    docx4j相关资料

    word转pdf所用docx4j

    docx4j 用的jar包,docx4j学习网址:http://www.docx4java.org/trac/docx4j

Global site tag (gtag.js) - Google Analytics