poi对于word文本的底纹和下划线的样式的展现
1 package poi.test; 2 import java.io.FileOutputStream; 3 import java.math.BigInteger; 4 import java.util.Random; 5 6 import org.apache.poi.xwpf.usermodel.BreakType; 7 import org.apache.poi.xwpf.usermodel.ParagraphAlignment; 8 import org.apache.poi.xwpf.usermodel.TextAlignment; 9 import org.apache.poi.xwpf.usermodel.XWPFDocument; 10 import org.apache.poi.xwpf.usermodel.XWPFParagraph; 11 import org.apache.poi.xwpf.usermodel.XWPFRun; 12 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts; 13 //import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHighlight; 14 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHpsMeasure; 15 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; 16 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; 17 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd; 18 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSpacing; 19 import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTUnderline; 20 //import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHighlightColor; 21 import org.openxmlformats.schemas.wordprocessingml.x2006.main.STLineSpacingRule; 22 import org.openxmlformats.schemas.wordprocessingml.x2006.main.STShd; 23 import org.openxmlformats.schemas.wordprocessingml.x2006.main.STUnderline; 24 25 public class StyleTest2 { 26 public static void main(String[] args) throws Exception { 27 StyleTest2 t = new StyleTest2(); 28 XWPFDocument doc = new XWPFDocument(); 29 // 需关闭护眼色才能看到效果 30 //t.setDocumentbackground(doc, "FDE9D9");//设置页面背景色 31 t.testSetUnderLineStyle(doc);//设置下划线样式以及突出显示文本 32 t.addNewPage(doc, BreakType.PAGE); 33 t.testSetShdStyle(doc);//设置文字底纹 34 t.saveDocument(doc,"e:/"+ System.currentTimeMillis() + ".docx"); 35 } 36 37 public void testSetUnderLineStyle(XWPFDocument doc) { 38 String[] colors = new String[] { "CCA6EF", "DD999D", "4FCEF0", 39 "7A7A7A", "F3C917", "FFA932", "C7B571", "535354", "5FD2F1", 40 "B5E900", "FEF8B6" }; 41 Random random = new Random(); 42 // 这里为了方便测试写了数字,推荐写英文样式 43 for (int i = 1; i <= 18; i++) { 44 XWPFParagraph p = doc.createParagraph(); 45 setParagraphFontInfoAndUnderLineStyle(p, 46 "本文是以poi3.9读写2010word、2010excel、2010ppt", "华文行楷", "000000","22", 47 false, false, false, true, 48 i,colors[Math.abs(random.nextInt(colors.length))], false, 0,null); 49 setParagraphSpacingInfo(p, true, "0", "50", false, "0", "0", 50 true,"240", STLineSpacingRule.Enum.forString("auto")); 51 setParagraphAlignInfo(p, ParagraphAlignment.LEFT,TextAlignment.CENTER); 52 } 53 } 54 55 public void testSetShdStyle(XWPFDocument doc) { 56 String[] colors = new String[] { "CCA6EF", "DD999D", "4FCEF0", 57 "7A7A7A", "F3C917", "FFA932", "C7B571", "535354", "5FD2F1", 58 "B5E900", "FEF8B6" }; 59 Random random = new Random(); 60 // 这里为了方便测试写了数字,推荐写英文样式 61 for (int i = 1; i <= 38; i++) { 62 XWPFParagraph p = doc.createParagraph(); 63 setParagraphFontInfoAndUnderLineStyle(p, 64 "本文是以poi3.9读写2010word、2010excel、2010ppt", "华文行楷", "1D8C56","22", 65 false, false, false, false, 66 i, null, true, i,colors[Math.abs(random.nextInt(colors.length))]); 67 setParagraphSpacingInfo(p, true, "0", "50", false, "0", "0", 68 true,"240", STLineSpacingRule.Enum.forString("auto")); 69 setParagraphAlignInfo(p, ParagraphAlignment.LEFT,TextAlignment.CENTER); 70 } 71 } 72 73 //设定水平对齐方式、垂直对齐方式 74 public void setParagraphAlignInfo(XWPFParagraph p, 75 ParagraphAlignment pAlign, TextAlignment valign) { 76 p.setAlignment(pAlign); 77 p.setVerticalAlignment(valign); 78 } 79 80 //三组数,分别设定 ★段前段后磅数★段前段后行数★间距★ 81 public void setParagraphSpacingInfo(XWPFParagraph p, boolean isSpace,String before, String after, 82 boolean isPLine, String beforeLines,String afterLines, 83 boolean isLine, String line,STLineSpacingRule.Enum lineValue) { 84 CTPPr pPPr = null; 85 if (p.getCTP() != null) { 86 if (p.getCTP().getPPr() != null) { 87 pPPr = p.getCTP().getPPr(); 88 } else { 89 pPPr = p.getCTP().addNewPPr(); 90 } 91 } 92 /** 93 * CTSpacing设置段落 94 */ 95 CTSpacing pSpacing = pPPr.getSpacing() != null ? pPPr.getSpacing() 96 : pPPr.addNewSpacing(); 97 if (isSpace) { 98 // 段前磅数 99 if (before != null) { 100 pSpacing.setBefore(new BigInteger(before)); 101 } 102 // 段后磅数 103 if (after != null) { 104 pSpacing.setAfter(new BigInteger(after)); 105 } 106 } 107 if (isPLine) { 108 // 段前行数 109 if (beforeLines != null) { 110 pSpacing.setBeforeLines(new BigInteger(beforeLines)); 111 } 112 // 段后行数 113 if (afterLines != null) { 114 pSpacing.setAfterLines(new BigInteger(afterLines)); 115 } 116 } 117 // 间距 118 if (isLine) { 119 if (line != null) { 120 pSpacing.setLine(new BigInteger(line)); 121 } 122 if (lineValue != null) { 123 pSpacing.setLineRule(lineValue); 124 } 125 } 126 } 127 128 @SuppressWarnings("deprecation") 129 public void setParagraphFontInfoAndUnderLineStyle(XWPFParagraph p, 130 String content, String fontFamily, String colorVal,String fontSize, 131 boolean isBlod, boolean isItalic,boolean isStrike, boolean isUnderLine, 132 int underLineStyle,String underLineColor, boolean isShd, int shdValue, String shdColor) { 133 XWPFRun pRun = null; 134 if (p.getRuns() != null && p.getRuns().size() > 0) { 135 pRun = p.getRuns().get(0); 136 } else { 137 pRun = p.createRun(); 138 } 139 pRun.setText(content); 140 /** 141 * CTRPr设置页 142 */ 143 CTRPr pRpr = null; 144 if (pRun.getCTR() != null) { 145 pRpr = pRun.getCTR().getRPr(); 146 if (pRpr == null) { 147 pRpr = pRun.getCTR().addNewRPr(); 148 } 149 } 150 /** 151 * CTFonts设置字体 152 */ 153 // 设置字体 154 CTFonts fonts = pRpr.isSetRFonts() ? pRpr.getRFonts() : pRpr 155 .addNewRFonts(); 156 fonts.setAscii(fontFamily);//---只改变Ascii中的(字母和数字) 157 fonts.setEastAsia(fontFamily);//---只改变中文EastAsia 158 fonts.setHAnsi(fontFamily);//--- 159 160 /** 161 * CTHpsMeasure设置大小 162 */ 163 // 设置字体大小 164 CTHpsMeasure sz = pRpr.isSetSz() ? pRpr.getSz() : pRpr.addNewSz(); 165 sz.setVal(new BigInteger(fontSize)); 166 167 CTHpsMeasure szCs = pRpr.isSetSzCs() ? pRpr.getSzCs() : pRpr 168 .addNewSzCs(); 169 szCs.setVal(new BigInteger(fontSize));//---字体大小 170 171 // 设置字体样式 172 if (isBlod) { 173 pRun.setBold(isBlod);//---是否加黑加粗 174 } 175 if (isItalic) { 176 pRun.setItalic(isItalic);//---是否倾斜 177 } 178 if (isStrike) { 179 pRun.setStrike(isStrike);//是否有中划线 180 } 181 if (colorVal != null) { 182 pRun.setColor(colorVal);//---字体颜色1D8C56 183 } 184 185 // // 设置字突出显示文本---设置的文字的背景颜色,太难看了!! 186 // if (underLineStyle > 0 && underLineStyle < 17) { 187 // CTHighlight hightLight = pRpr.isSetHighlight() ? pRpr 188 // .getHighlight() : pRpr.addNewHighlight(); 189 // hightLight.setVal(STHighlightColor.Enum.forInt(underLineStyle)); 190 // } 191 // 192 // 设置下划线样式 193 if (isUnderLine) { 194 CTUnderline u = pRpr.isSetU() ? pRpr.getU() : pRpr.addNewU(); 195 u.setVal(STUnderline.Enum.forInt(Math.abs(underLineStyle % 19))); 196 if (underLineColor != null) { 197 u.setColor(underLineColor); 198 } 199 } 200 /** 201 * CTShd设置底纹 202 */ 203 if (isShd) { 204 // 设置底纹 205 CTShd shd = pRpr.isSetShd() ? pRpr.getShd() : pRpr.addNewShd(); 206 if (shdValue > 0 && shdValue <= 38) { 207 shd.setVal(STShd.Enum.forInt(underLineStyle)); 208 } 209 if (shdColor != null) { 210 shd.setColor(shdColor); 211 } 212 } 213 } 214 215 // // 设置页面背景色 216 // public void setDocumentbackground(XWPFDocument document, String bgColor) { 217 // CTBackground bg = null; 218 // if( document.getDocument().isSetBackground()){ 219 // bg = document.getDocument().getBackground(); 220 // }else{ 221 // bg = document.getDocument().addNewBackground(); 222 // } 223 // bg.setColor(bgColor); 224 // } 225 226 public void addNewPage(XWPFDocument document, BreakType breakType) { 227 XWPFParagraph xp = document.createParagraph(); 228 xp.createRun().addBreak(breakType); 229 } 230 231 public void saveDocument(XWPFDocument document, String savePath) 232 throws Exception { 233 FileOutputStream fos = new FileOutputStream(savePath); 234 document.write(fos); 235 fos.close(); 236 } 237 }