直接上代码:
import java.io.FileOutputStream; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.apache.poi.xwpf.usermodel.BreakType; import org.apache.poi.xwpf.usermodel.ParagraphAlignment; import org.apache.poi.xwpf.usermodel.TextAlignment; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBackground; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHighlight; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHpsMeasure; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSpacing; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTUnderline; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHighlightColor; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STLineSpacingRule; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc; public class POI_07_设置段落底纹_S3_Test { public static void main(String[] args) throws Exception { POI_07_设置段落底纹_S3_Test t = new POI_07_设置段落底纹_S3_Test(); XWPFDocument doc = new XWPFDocument(); // 测试下划线样式 t.testSetParagraphUnderLineStyle(doc); t.addNewPage(doc, BreakType.PAGE); // 测试文本高亮 t.testSetParagraphTextHightLightStyle(doc); t.addNewPage(doc, BreakType.PAGE); // 测试字符底纹 t.testSetParagraphTextShdStyle(doc); // 测试段落底纹 t.testSetParagraphShdStyle(doc); // 测试表格样式 t.testTableStyle(doc); t.saveDocument(doc, "f:/saveFile/temp/sys_" + System.currentTimeMillis() + ".docx"); } public void testSetParagraphUnderLineStyle(XWPFDocument doc) { String[] colors = new String[] { "CCA6EF", "DD999D", "4FCEF0", "7A7A7A", "F3C917", "FFA932", "C7B571", "535354", "5FD2F1", "A6DBFF", "FEF8B6" }; Random random = new Random(); // TODO 这里为了方便测试写了数字,推荐写英文样式 for (int i = 1; i <= 18; i++) { XWPFParagraph p = doc.createParagraph(); setParagraphTextStyleInfo(p, "测试下划线_" + i, "宋体", "1D8C56", "22", false, false, false, true, i, colors[Math.abs(random.nextInt(colors.length))], false, 0); setParagraphSpacingInfo(p, true, "0", "50", false, "0", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); } } public void testSetParagraphTextHightLightStyle(XWPFDocument doc) { // TODO 这里为了方便测试写了数字,推荐写英文样式 for (int i = 1; i <= 17; i++) { XWPFParagraph p = doc.createParagraph(); setParagraphTextStyleInfo(p, "测试文本高亮_" + i, "宋体", "1D8C56", "22", false, false, false, false, 0, null, true, i); setParagraphSpacingInfo(p, true, "0", "50", false, "0", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); } } public void testSetParagraphTextShdStyle(XWPFDocument doc) { String[] colors = new String[] { "CCA6EF", "DD999D", "4FCEF0", "7A7A7A", "F3C917", "FFA932", "C7B571", "535354", "5FD2F1", "A6DBFF", "FEF8B6" }; Random random = new Random(); // TODO 这里为了方便测试写了数字,推荐写英文样式 for (int i = 1; i <= 38; i++) { XWPFParagraph p = doc.createParagraph(); setParagraphTextStyleInfo(p, "测试文本底纹_" + i, "宋体", "1D8C56", "22", false, false, false, false, 0, null, false, 0); setParagraphTextShdStyle(p, true, i, colors[Math.abs(random.nextInt(colors.length))]); setParagraphSpacingInfo(p, true, "0", "50", false, "0", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.LEFT, TextAlignment.CENTER); } } public void testSetParagraphShdStyle(XWPFDocument doc) { String[] colors = new String[] { "CCA6EF", "DD999D", "4FCEF0", "7A7A7A", "F3C917", "FFA932", "C7B571", "535354", "5FD2F1", "A6DBFF", "FEF8B6" }; Random random = new Random(); // TODO 这里为了方便测试写了数字,推荐写英文样式 for (int i = 1; i <= 38; i++) { XWPFParagraph p = doc.createParagraph(); setParagraphTextStyleInfo(p, "测试段落底纹_" + i, "宋体", "1D8C56", "22", false, false, false, false, 0, null, false, 0); setParagraphShdStyle(p, true, i, colors[Math.abs(random.nextInt(colors.length))]); setParagraphSpacingInfo(p, true, "0", "50", false, "0", "0", true, "240", STLineSpacingRule.Enum.forString("auto")); setParagraphAlignInfo(p, ParagraphAlignment.CENTER, TextAlignment.CENTER); } } public void setParagraphAlignInfo(XWPFParagraph p, ParagraphAlignment pAlign, TextAlignment valign) { p.setAlignment(pAlign); p.setVerticalAlignment(valign); } public void setParagraphSpacingInfo(XWPFParagraph p, boolean isSpace, String before, String after, boolean isPLine, String beforeLines, String afterLines, boolean isLine, String line, STLineSpacingRule.Enum lineValue) { CTPPr pPPr = null; if (p.getCTP() != null) { if (p.getCTP().getPPr() != null) { pPPr = p.getCTP().getPPr(); } else { pPPr = p.getCTP().addNewPPr(); } } CTSpacing pSpacing = pPPr.getSpacing() != null ? pPPr.getSpacing() : pPPr.addNewSpacing(); if (isSpace) { // 段前磅数 if (before != null) { pSpacing.setBefore(new BigInteger(before)); } // 段后磅数 if (after != null) { pSpacing.setAfter(new BigInteger(after)); } } if (isPLine) { // 段前行数 if (beforeLines != null) { pSpacing.setBeforeLines(new BigInteger(beforeLines)); } // 段后行数 if (afterLines != null) { pSpacing.setAfterLines(new BigInteger(afterLines)); } } // 间距 if (isLine) { if (line != null) { pSpacing.setLine(new BigInteger(line)); } if (lineValue != null) { pSpacing.setLineRule(lineValue); } } } public void setParagraphTextStyleInfo(XWPFParagraph p, String content, String fontFamily, String colorVal, String fontSize, boolean isBlod, boolean isItalic, boolean isStrike, boolean isUnderLine, int underLineStyle, String underLineColor, boolean isHightLight, int hightLightValue) { XWPFRun pRun = null; if (p.getRuns() != null && p.getRuns().size() > 0) { pRun = p.getRuns().get(0); } else { pRun = p.createRun(); } pRun.setText(content); CTRPr pRpr = null; if (pRun.getCTR() != null) { pRpr = pRun.getCTR().getRPr(); if (pRpr == null) { pRpr = pRun.getCTR().addNewRPr(); } } // 设置字体 CTFonts fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr .addNewRFonts(); fonts.setAscii(fontFamily); fonts.setEastAsia(fontFamily); fonts.setHAnsi(fontFamily); // 设置字体大小 CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz(); sz.setVal(new BigInteger(fontSize)); CTHpsMeasure szCs = pRpr.isSetSzCs() ? pRpr.getSzCs() : pRpr .addNewSzCs(); szCs.setVal(new BigInteger(fontSize)); if (colorVal != null) { pRun.setColor(colorVal); } // 设置字体样式 if (isBlod) { pRun.setBold(isBlod); } if (isItalic) { pRun.setItalic(isItalic); } if (isStrike) { pRun.setStrike(isStrike); } if (colorVal != null) { pRun.setColor(colorVal); } // 设置下划线样式 if (isUnderLine) { CTUnderline u = pRpr.isSetU() ? pRpr.getU() : pRpr.addNewU(); u.setVal(STUnderline.Enum.forInt(Math.abs(underLineStyle % 19))); if (underLineColor != null) { u.setColor(underLineColor); } } // 设置字突出显示文本 if (isHightLight) { if (hightLightValue > 0 && hightLightValue < 17) { CTHighlight hightLight = pRpr.isSetHighlight() ? pRpr .getHighlight() : pRpr.addNewHighlight(); hightLight .setVal(STHighlightColor.Enum.forInt(hightLightValue)); } } } public void setParagraphShdStyle(XWPFParagraph p, boolean isShd, int shdValue, String shdColor) { XWPFRun pRun = null; if (p.getRuns() != null && p.getRuns().size() > 0) { pRun = p.getRuns().get(0); } if (pRun == null) { return; } CTPPr pPpr = null; if (pRun.getCTR() != null) { pPpr = p.getCTP().getPPr(); if (pPpr == null) { pPpr = p.getCTP().addNewPPr(); } } CTShd shd = pPpr.isSetShd() ? pPpr.getShd() : pPpr.addNewShd(); if (shdValue > 0 && shdValue <= 38) { shd.setVal(STShd.Enum.forInt(shdValue)); } if (shdColor != null) { shd.setColor(shdColor); // shd.setFill(shdColor); // shd.setColor("auto"); } } public void setParagraphTextShdStyle(XWPFParagraph p, boolean isShd, int shdValue, String shdColor) { XWPFRun pRun = null; if (p.getRuns() != null && p.getRuns().size() > 0) { pRun = p.getRuns().get(0); } if (pRun == null) { return; } CTRPr pRpr = null; if (pRun.getCTR() != null) { pRpr = pRun.getCTR().getRPr(); if (pRpr == null) { pRpr = pRun.getCTR().addNewRPr(); } } if (isShd) { // 设置底纹 CTShd shd = pRpr.isSetShd() ? pRpr.getShd() : pRpr.addNewShd(); if (shdValue > 0 && shdValue <= 38) { shd.setVal(STShd.Enum.forInt(shdValue)); } if (shdColor != null) { shd.setColor(shdColor); // shd.setColor("auto"); // shd.setFill(shdColor); } } } public void testTableStyle(XWPFDocument doc) { String[] colors = new String[] { "CCA6EF", "DD999D", "4FCEF0", "7A7A7A", "F3C917", "FFA932", "C7B571", "535354", "5FD2F1", "A6DBFF", "FEF8B6" }; Random random = new Random(); List<String> columnList = new ArrayList<String>(); columnList.add("序号"); columnList.add("姓名信息|姓甚|名谁"); columnList.add("名刺信息|籍贯|营生"); columnList.add("字"); XWPFTable table = doc.createTable(7, 6); setTableWidth(table, "8000"); XWPFTableRow firstRow = table.getRow(0); XWPFTableRow secondRow = table.getRow(1); firstRow.setHeight(400); secondRow.setHeight(400); XWPFTableCell firstCell = null; XWPFTableCell secondCell = null; int firstCellIndex = 0; for (String str : columnList) { if (str.indexOf("|") == -1) { firstCell = firstRow.getCell(firstCellIndex); setCellText(firstCell, str, 1600, true, 6, "CCCCCC"); firstCellIndex++; } else { String[] strArr = str.split("\\|"); for (int i = 1; i < strArr.length; i++) { firstCell = firstRow.getCell(firstCellIndex); setCellText(firstCell, strArr[0], 1600, true, 6, "CCCCCC"); secondCell = secondRow.getCell(firstCellIndex); setCellText(secondCell, strArr[i], 1600, true, 6, "CCCCCC"); firstCellIndex++; } } } // 合并行(跨列) firstCellIndex = 0; for (String str : columnList) { if (str.indexOf("|") == -1) { firstCellIndex++; } else { String[] strArr = str.split("\\|"); mergeCellsHorizontal(table, 0, firstCellIndex, firstCellIndex + strArr.length - 2); firstCellIndex += strArr.length - 1; } } // 合并列(跨行) firstCellIndex = 0; for (String str : columnList) { if (str.indexOf("|") == -1) { mergeCellsVertically(table, firstCellIndex, 0, 1); firstCellIndex++; } else { String[] strArr = str.split("\\|"); firstCellIndex += strArr.length - 1; } } int k = 0; // 数据 for (int i = 2; i < 7; i++) { firstRow = table.getRow(i); firstRow.setHeight(380); for (int j = 0; j < 6; j++) { firstCell = firstRow.getCell(j); setCellText(firstCell, "测试", 1600, true, k % 38, colors[Math.abs(random.nextInt(colors.length))]); k++; } } } public void setCellText(XWPFTableCell cell, String text, int width, boolean isShd, int shdValue, String shdColor) { CTTc cttc = cell.getCTTc(); CTTcPr ctPr = cttc.isSetTcPr() ? cttc.getTcPr() : cttc.addNewTcPr(); CTShd ctshd = ctPr.isSetShd() ? ctPr.getShd() : ctPr.addNewShd(); ctPr.addNewTcW().setW(BigInteger.valueOf(width)); if (isShd) { if (shdValue > 0 && shdValue <= 38) { ctshd.setVal(STShd.Enum.forInt(shdValue)); } if (shdColor != null) { // ctshd.setFill(shdColor); // ctshd.setColor("auto"); ctshd.setColor(shdColor); } } ctPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cell.setText(text); } /** * @Description: 跨列合并 */ public void mergeCellsHorizontal(XWPFTable table, int row, int fromCell, int toCell) { for (int cellIndex = fromCell; cellIndex <= toCell; cellIndex++) { XWPFTableCell cell = table.getRow(row).getCell(cellIndex); if (cellIndex == fromCell) { cell.getCTTc().addNewTcPr().addNewHMerge() .setVal(STMerge.RESTART); } else { cell.getCTTc().addNewTcPr().addNewHMerge() .setVal(STMerge.CONTINUE); } } } /** * @Description: 跨行合并 */ public void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) { for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++) { XWPFTableCell cell = table.getRow(rowIndex).getCell(col); if (rowIndex == fromRow) { cell.getCTTc().addNewTcPr().addNewVMerge() .setVal(STMerge.RESTART); } else { cell.getCTTc().addNewTcPr().addNewVMerge() .setVal(STMerge.CONTINUE); } } } public void setTableWidth(XWPFTable table, String width) { CTTbl ttbl = table.getCTTbl(); CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl .getTblPr(); CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr .addNewTblW(); CTJc cTJc = tblPr.addNewJc(); cTJc.setVal(STJc.Enum.forString("center")); tblWidth.setW(new BigInteger(width)); tblWidth.setType(STTblWidth.DXA); } // 设置页面背景色 public void setDocumentbackground(XWPFDocument document, String bgColor) { CTBackground bg = document.getDocument().isSetBackground() ? document .getDocument().getBackground() : document.getDocument() .addNewBackground(); bg.setColor(bgColor); } public void addNewPage(XWPFDocument document, BreakType breakType) { XWPFParagraph xp = document.createParagraph(); xp.createRun().addBreak(breakType); } public void saveDocument(XWPFDocument document, String savePath) throws Exception { FileOutputStream fos = new FileOutputStream(savePath); document.write(fos); fos.close(); } }
结果为:
转载请注明原处,原文链接: http://53873039oycg.iteye.com/blog/2157923,谢谢。
全文完。