???????? 直接上代码,代码很简单没什么难度。
????????
import java.io.FileOutputStream; import java.math.BigInteger; import java.util.ArrayList; import java.util.List; import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; import org.apache.poi.xwpf.usermodel.Borders; import org.apache.poi.xwpf.usermodel.BreakClear; 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.XWPFTableCell.XWPFVertAlign; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFldChar; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr; 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.CTText; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STFldCharType; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc; public class POI_页眉_S3_Test { public static void main(String[] args) throws Exception { POI_页眉_S3_Test t=new POI_页眉_S3_Test(); System.out.println("------------------------简单文字页脚-----------------"); t.simpleFooter("f:/saveFile/temp/sys_"+ System.currentTimeMillis() + ".docx"); System.out.println("------------------------简单文字页眉页脚-----------------"); XWPFDocument document = new XWPFDocument(); t.simpleDateHeader(document); t.createSimpleTable(document); t.addNewPage(document, BreakType.PAGE); String str="测试测试测试测试测试文本测试测试测试测试测试文本测试\r\n测试测试测试测试文本测试测试测试测试测试文本测试"; t.addSimpleParagraph(document, str, "宋体",11,"FF0000", true, false); t.addNewPage(document, BreakType.COLUMN); t.addSimpleParagraph(document, str,"微软雅黑",12, "00FF00", false, true); t.addNewPage(document, BreakType.TEXT_WRAPPING); t.addSimpleParagraph(document, str,"楷体",13, "0000FF", true, true); t.addBreakClear(document, BreakClear.ALL); t.addSimpleParagraph(document, str,"黑体",14,"000000", false, false); t.simpleNumberFooter(document); t.saveDocument(document, "f:/saveFile/temp/sys_"+ System.currentTimeMillis() + ".docx"); } /** * @Description: 文字页脚 * @see: http://www.coderanch.com/t/525626/java/java/Adding-Header-Footer-Word-Document */ public void simpleFooter(String savePath) throws Exception { XWPFDocument document = new XWPFDocument(); CTP ctp = CTP.Factory.newInstance(); CTR ctr = ctp.addNewR(); CTText textt = ctr.addNewT(); textt.setStringValue( "测试" ); XWPFParagraph codePara = new XWPFParagraph( ctp, document ); codePara.setAlignment(ParagraphAlignment.CENTER); codePara.setVerticalAlignment(TextAlignment.CENTER); XWPFParagraph[] newparagraphs = new XWPFParagraph[1]; newparagraphs[0] = codePara; CTSectPr sectPr = document.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy( document, sectPr ); headerFooterPolicy.createFooter( STHdrFtr.DEFAULT, newparagraphs ); headerFooterPolicy.createHeader(STHdrFtr.DEFAULT, newparagraphs ); FileOutputStream fos = new FileOutputStream(savePath); document.write(fos); fos.close(); } //页脚:显示页码信息 public void simpleNumberFooter(XWPFDocument document) throws Exception { CTP ctp = CTP.Factory.newInstance(); XWPFParagraph codePara = new XWPFParagraph(ctp, document); XWPFRun r1 = codePara.createRun(); r1.setText("第"); r1.setFontSize(11); CTRPr rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); r1 = codePara.createRun(); CTFldChar fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); CTText ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("PAGE \\* MERGEFORMAT"); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("页 总共"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); r1 = codePara.createRun(); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("NUMPAGES \\* MERGEFORMAT "); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("页"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("宋体"); fonts.setEastAsia("宋体"); fonts.setHAnsi("宋体"); codePara.setAlignment(ParagraphAlignment.CENTER); codePara.setVerticalAlignment(TextAlignment.CENTER); codePara.setBorderTop(Borders.THICK); XWPFParagraph[] newparagraphs = new XWPFParagraph[1]; newparagraphs[0] = codePara; CTSectPr sectPr = document.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(document, sectPr); headerFooterPolicy.createFooter(STHdrFtr.DEFAULT, newparagraphs); } public void simpleDateHeader(XWPFDocument document) throws Exception { CTP ctp = CTP.Factory.newInstance(); XWPFParagraph codePara = new XWPFParagraph(ctp, document); XWPFRun r1 = codePara.createRun(); CTFldChar fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); CTText ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("TIME \\@ \"EEEE\""); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); CTRPr rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("年"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); r1 = codePara.createRun(); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("TIME \\@ \"O\""); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("月"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); r1 = codePara.createRun(); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("begin")); r1 = codePara.createRun(); ctText = r1.getCTR().addNewInstrText(); ctText.setStringValue("TIME \\@ \"A\""); ctText.setSpace(SpaceAttribute.Space.Enum.forString("preserve")); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); fldChar = r1.getCTR().addNewFldChar(); fldChar.setFldCharType(STFldCharType.Enum.forString("end")); r1 = codePara.createRun(); r1.setText("日"); r1.setFontSize(11); rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii("微软雅黑"); fonts.setEastAsia("微软雅黑"); fonts.setHAnsi("微软雅黑"); codePara.setAlignment(ParagraphAlignment.CENTER); codePara.setVerticalAlignment(TextAlignment.CENTER); codePara.setBorderBottom(Borders.THICK); XWPFParagraph[] newparagraphs = new XWPFParagraph[1]; newparagraphs[0] = codePara; CTSectPr sectPr = document.getDocument().getBody().addNewSectPr(); XWPFHeaderFooterPolicy headerFooterPolicy = new XWPFHeaderFooterPolicy(document, sectPr); headerFooterPolicy.createHeader(STHdrFtr.DEFAULT, newparagraphs); } public void addNewPage(XWPFDocument document,BreakType breakType){ XWPFParagraph xp = document.createParagraph(); xp.createRun().addBreak(breakType); } public void addBreakClear(XWPFDocument document,BreakClear breakClear){ XWPFParagraph xp = document.createParagraph(); xp.createRun().addBreak(breakClear); } //TODO 写的时候遇到过一次数组越界,测试几次都没法重现 public void addSimpleParagraph(XWPFDocument document,String text,String fontName,int fontSize,String color,boolean isBold,boolean isItalic){ XWPFParagraph xp = document.createParagraph(); XWPFRun r1 = xp.createRun(); r1.setText(text); r1.setFontSize(fontSize); r1.setBold(isBold); r1.setItalic(isItalic); r1.setColor(color); CTRPr rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr(); CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts(); fonts.setAscii(fontName); fonts.setEastAsia(fontName); fonts.setHAnsi(fontName); xp.setAlignment(ParagraphAlignment.CENTER); xp.setVerticalAlignment(TextAlignment.CENTER); } //注意: 代码采用的是先写数据再写表头 public void createSimpleTable(XWPFDocument doc) throws Exception { List<String> columnList = new ArrayList<String>(); columnList.add("序号"); columnList.add("姓名信息|姓甚|名谁"); columnList.add("名刺信息|籍贯|营生"); XWPFTable table = doc.createTable(2,5); 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("8000")); tblWidth.setType(STTblWidth.DXA); XWPFTableRow firstRow=null; XWPFTableRow secondRow=null; XWPFTableCell firstCell=null; XWPFTableCell secondCell=null; for(int i=0;i<2;i++){ firstRow=table.getRow(i); firstRow.setHeight(380); for(int j=0;j<5;j++){ firstCell=firstRow.getCell(j); setCellText(firstCell, "测试", null, 1600); } } firstRow=table.insertNewTableRow(0); secondRow=table.insertNewTableRow(1); firstRow.setHeight(380); secondRow.setHeight(380); for(String str:columnList){ if(str.indexOf("|") == -1){ firstCell=firstRow.addNewTableCell(); secondCell=secondRow.addNewTableCell(); createVSpanCell(firstCell, str,"CCCCCC",1600,STMerge.RESTART); createVSpanCell(secondCell, "", "CCCCCC", 1600,null); }else{ String[] strArr=str.split("\\|"); firstCell=firstRow.addNewTableCell(); createHSpanCell(firstCell, strArr[0],"CCCCCC",1600,STMerge.RESTART); for(int i=1;i<strArr.length-1;i++){ firstCell=firstRow.addNewTableCell(); createHSpanCell(firstCell, "","CCCCCC",1600,null); } for(int i=1;i<strArr.length;i++){ secondCell=secondRow.addNewTableCell(); setCellText(secondCell, strArr[i], "CCCCCC", 1600); } } } } public void setCellText(XWPFTableCell cell,String text, String bgcolor, int width) { CTTc cttc = cell.getCTTc(); CTTcPr cellPr = cttc.addNewTcPr(); cellPr.addNewTcW().setW(BigInteger.valueOf(width)); cell.setColor(bgcolor); cell.setVerticalAlignment(XWPFVertAlign.CENTER); CTTcPr ctPr = cttc.addNewTcPr(); ctPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cell.setText(text); } public void createHSpanCell(XWPFTableCell cell,String value, String bgcolor, int width,STMerge.Enum stMerge){ CTTc cttc = cell.getCTTc(); CTTcPr cellPr = cttc.addNewTcPr(); cellPr.addNewTcW().setW(BigInteger.valueOf(width)); cell.setColor(bgcolor); cellPr.addNewHMerge().setVal(stMerge); cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cttc.getPList().get(0).addNewR().addNewT().setStringValue(value); } public void createVSpanCell(XWPFTableCell cell,String value, String bgcolor, int width,STMerge.Enum stMerge){ CTTc cttc = cell.getCTTc(); CTTcPr cellPr = cttc.addNewTcPr(); cellPr.addNewTcW().setW(BigInteger.valueOf(width)); cell.setColor(bgcolor); cellPr.addNewVMerge().setVal(stMerge); cellPr.addNewVAlign().setVal(STVerticalJc.CENTER); cttc.getPList().get(0).addNewPPr().addNewJc().setVal(STJc.CENTER); cttc.getPList().get(0).addNewR().addNewT().setStringValue(value); } public void saveDocument(XWPFDocument document,String savePath) throws Exception{ FileOutputStream fos = new FileOutputStream(savePath); document.write(fos); fos.close(); } }
??? 结果为:
???
------------------------简单文字页脚-----------------
???
???
------------------------简单文字页眉页脚-----------------
???
???
?????? 转载请注明原处,原文链接:http://53873039oycg.iteye.com/blog/2149884? ,谢谢。
?????? 全文完。
??
原文:http://53873039oycg.iteye.com/blog/2149884