一 不分栏
创建页眉
/**
* 创建默认页眉
*
* @param docx XWPFDocument文档对象
* @param text 页眉文本
* @return 返回文档帮助类对象,可用于方法链调用
* @throws IOException IO异常
* @throws FileNotFoundException 找不到文件异常
*/
public static void createDefaultHeader(final XWPFDocument docx, final String text){
CTP ctp = CTP.Factory.newInstance();
XWPFParagraph paragraph = new XWPFParagraph(ctp, docx);
ctp.addNewR().addNewT().setStringValue(text);
ctp.addNewR().addNewT().setSpace(SpaceAttribute.Space.PRESERVE);
// 分割线
CTP splitLine = CTP.Factory.newInstance();
XWPFParagraph paragraph2 = new XWPFParagraph(splitLine, docx);
CTBorder bottom = splitLine.addNewPPr().addNewPBdr().addNewTop();
bottom.setVal(STBorder.Enum.forInt(3));
CTSectPr sectPr = docx.getDocument().getBody().isSetSectPr() ? docx.getDocument().getBody().getSectPr() : docx.getDocument().getBody().addNewSectPr();
XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(docx, sectPr);
XWPFHeader header = policy.createHeader(STHdrFtr.DEFAULT, new XWPFParagraph[] { paragraph,paragraph2 });
header.setXWPFDocument(docx);
}
创建页脚(页码)
public static void createDefaultFooter(final XWPFDocument docx) {
CTP pageNo = CTP.Factory.newInstance();
XWPFParagraph footer = new XWPFParagraph(pageNo, docx);
CTPPr begin = pageNo.addNewPPr();
begin.addNewPStyle().setVal(STYLE_FOOTER);
begin.addNewJc().setVal(STJc.CENTER);
pageNo.addNewR().addNewFldChar().setFldCharType(STFldCharType.BEGIN);
pageNo.addNewR().addNewInstrText().setStringValue("PAGE \\* MERGEFORMAT");
pageNo.addNewR().addNewFldChar().setFldCharType(STFldCharType.SEPARATE);
org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR end = pageNo.addNewR();
CTRPr endRPr = end.addNewRPr();
endRPr.addNewNoProof();
endRPr.addNewLang().setVal(LANG_ZH_CN);
end.addNewFldChar().setFldCharType(STFldCharType.END);
CTSectPr sectPr = docx.getDocument().getBody().isSetSectPr() ? docx.getDocument().getBody().getSectPr() : docx.getDocument().getBody().addNewSectPr();
XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(docx, sectPr);
policy.createFooter(STHdrFtr.DEFAULT, new XWPFParagraph[] { footer });
}
设置页边距
/**
* 设置页边距 (word中1厘米约等于567)
*
* @param document
* @param left
* @param top
* @param right
* @param bottom
*/
public static void setDocumentMargin(XWPFDocument document, String left, String top, String right, String bottom) {
CTSectPr sectPr = document.getDocument().getBody().addNewSectPr();
CTPageMar ctpagemar = sectPr.addNewPgMar();
if (StringUtils.isNotBlank(left)) {
ctpagemar.setLeft(new BigInteger(left));
}
if (StringUtils.isNotBlank(top)) {
ctpagemar.setTop(new BigInteger(top));
}
if (StringUtils.isNotBlank(right)) {
ctpagemar.setRight(new BigInteger(right));
}
if (StringUtils.isNotBlank(bottom)) {
ctpagemar.setBottom(new BigInteger(bottom));
}
ctpagemar.setHeader(new BigInteger("283"));
ctpagemar.setFooter(new BigInteger("283"));
}
二 创建双栏的方法
public static void main(String[] args) throws Exception {
XWPFDocument document = new XWPFDocument();
// setDocumentMargin(document, "567", "567", "567", "567");
// XWPFHeader header = document.createHeader(HeaderFooterType.DEFAULT);
// createDefaultHeader(document,"页眉");
// addPictureForParagraph(document,new FileInputStream("D:\\workspace\\demo\\src\\test\\resources\\7.jpg"), Document.PICTURE_TYPE_JPEG, "", Units.pixelToEMU(117), Units.pixelToEMU(36));
splitColumn(document);
// outputMathMl(document);
// addTableDemo(document);
// createDefaultFooter(document);
document.write(new FileOutputStream("D:\\workspace\\demo\\src\\test\\resources\\CreateWordFormulaFromLaTeX.docx"));
}
private static void splitColumn(XWPFDocument document) {
document.createParagraph().createRun().setText("111111111111111111111111111111111111111111111111111");
document.createParagraph().setPageBreak(true);
XWPFParagraph paragraph = document.createParagraph();
paragraph.createRun().setText("22222222222222222222222222222222222222222222222222");
XWPFRun run1 = paragraph.createRun();
run1.addCarriageReturn();
paragraph.createRun().setText("4444444444444444444444444444444444444444444");
document.createParagraph().createRun().setText("33333333333333333333333333333333333333333333333333");
CTP ctp1 = document.createParagraph().getCTP();
CTBorder bottom = ctp1.addNewPPr().addNewPBdr().addNewTop();
bottom.setVal(STBorder.Enum.forInt(3));
// 分栏
CTBody body = document.getDocument().getBody();
CTSectPr ctSectPr1 = body.addNewP().addNewPPr().addNewSectPr();
ctSectPr1.addNewCols().setNum(BigInteger.valueOf(1));
XWPFRun run = document.createParagraph().createRun();
run.setText("sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss");
run.setTextHighlightColor("lightGray");
// body.addNewP().addNewR().addNewT().setStringValue("居中sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss");
CTSectPr ctSectPr = body.addNewSectPr();
ctSectPr.addNewType().setVal(STSectionMark.Enum.forString("continuous"));
CTColumns ctColumns = ctSectPr.addNewCols();
ctColumns.setNum(BigInteger.valueOf(2));
ctColumns.setSep(STOnOff.Enum.forInt(1));
}
三 分栏情况下设置页眉页脚及页边距的方法
/**
* 分栏
* @param document
*/
private static void splitColumn(XWPFDocument document) {
document.createParagraph().createRun().setText("111111111111111111111111111111111111111111111111111");
document.createParagraph().setPageBreak(true);
XWPFParagraph paragraph = document.createParagraph();
paragraph.createRun().setText("22222222222222222222222222222222222222222222222222");
XWPFRun run1 = paragraph.createRun();
run1.addCarriageReturn();
paragraph.createRun().setText("4444444444444444444444444444444444444444444");
document.createParagraph().createRun().setText("33333333333333333333333333333333333333333333333333");
CTP ctp1 = document.createParagraph().getCTP();
CTBorder bottom = ctp1.addNewPPr().addNewPBdr().addNewTop();
bottom.setVal(STBorder.Enum.forInt(3));
// 分栏
CTBody body = document.getDocument().getBody();
CTSectPr ctSectPr1 = body.addNewP().addNewPPr().addNewSectPr();
// 设置页边距
setDocumentMarginForSec(ctSectPr1,"567","567","567","567");
// 创建页眉
createHeaderForSec(document,ctSectPr1,"页眉",true);
// 创建页码
createFooterForSec(document,ctSectPr1);
ctSectPr1.addNewCols().setNum(BigInteger.valueOf(1));
XWPFRun run = document.createParagraph().createRun();
run.setText("sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss");
run.setTextHighlightColor("lightGray");
// body.addNewP().addNewR().addNewT().setStringValue("居中sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss");
CTSectPr ctSectPr = body.addNewSectPr();
ctSectPr.addNewType().setVal(STSectionMark.Enum.forString("continuous"));
CTColumns ctColumns = ctSectPr.addNewCols();
ctColumns.setNum(BigInteger.valueOf(2));
ctColumns.setSep(STOnOff.Enum.forInt(1));
}
private static void setDocumentMarginForSec(CTSectPr sectPr,String left,String top, String right, String bottom) {
CTPageMar ctpagemar = sectPr.addNewPgMar();
if (!org.springframework.util.StringUtils.isEmpty(left)) {
ctpagemar.setLeft(new BigInteger(left));
}
if (!org.springframework.util.StringUtils.isEmpty(top)) {
ctpagemar.setTop(new BigInteger(top));
}
if (!org.springframework.util.StringUtils.isEmpty(right)) {
ctpagemar.setRight(new BigInteger(right));
}
if (!org.springframework.util.StringUtils.isEmpty(bottom)) {
ctpagemar.setBottom(new BigInteger(bottom));
}
ctpagemar.setHeader(new BigInteger(top).divide(new BigInteger("2")));
ctpagemar.setFooter(new BigInteger(bottom).divide(new BigInteger("2")));
}
private static void createFooterForSec(XWPFDocument document, CTSectPr ctSectPr1) {
CTP pageNo = CTP.Factory.newInstance();
XWPFParagraph paragraph = new XWPFParagraph(pageNo, document);
CTPPr begin = pageNo.addNewPPr();
begin.addNewPStyle().setVal(STYLE_FOOTER);
begin.addNewJc().setVal(STJc.CENTER);
pageNo.addNewR().addNewFldChar().setFldCharType(STFldCharType.BEGIN);
pageNo.addNewR().addNewInstrText().setStringValue("PAGE \\* MERGEFORMAT");
pageNo.addNewR().addNewFldChar().setFldCharType(STFldCharType.SEPARATE);
org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR end = pageNo.addNewR();
CTRPr endRPr = end.addNewRPr();
endRPr.addNewNoProof();
endRPr.addNewLang().setVal(LANG_ZH_CN);
end.addNewFldChar().setFldCharType(STFldCharType.END);
FtrDocument ftrDoc = org.openxmlformats.schemas.wordprocessingml.x2006.main.FtrDocument.Factory.newInstance();
XWPFFooter footer = (XWPFFooter) document.createRelationship(XWPFRelation.FOOTER, XWPFFactory.getInstance(), 1);
footer.setXWPFDocument(document);
CTHdrFtr ftr = footer._getHdrFtr();
ftr.addNewP();
ftr.setPArray(0,paragraph.getCTP());
CTHdrFtrRef ctHdrFtrRef = ctSectPr1.addNewFooterReference();
ctHdrFtrRef.setType(STHdrFtr.DEFAULT);
ctHdrFtrRef.setId(document.getRelationId(footer));
footer.setHeaderFooter(ftr);
ftrDoc.setFtr(ftr);
footer.setXWPFDocument(document);
}
private static void createHeaderForSec(XWPFDocument document, CTSectPr ctSectPr1, String text,boolean withSplitLine) {
// 页眉文字
CTP ctp = CTP.Factory.newInstance();
XWPFParagraph paragraph = new XWPFParagraph(ctp, document);
ctp.addNewR().addNewT().setStringValue(text);
ctp.addNewR().addNewT().setSpace(SpaceAttribute.Space.PRESERVE);
XWPFParagraph paragraph2 = null;
if (withSplitLine){
// 分割线
CTP splitLine = CTP.Factory.newInstance();
paragraph2 = new XWPFParagraph(splitLine, document);
CTBorder bottom = splitLine.addNewPPr().addNewPBdr().addNewTop();
bottom.setVal(STBorder.Enum.forInt(3));
}
HdrDocument hdrDoc = HdrDocument.Factory.newInstance();
XWPFHeader header = (XWPFHeader) document.createRelationship(XWPFRelation.HEADER, XWPFFactory.getInstance(), 1);
CTHdrFtr hdr = header._getHdrFtr();
hdr.addNewP();
hdr.setPArray(0,paragraph.getCTP());
if (withSplitLine){
hdr.addNewP();
hdr.setPArray(1,paragraph2.getCTP());
}
CTHdrFtrRef ctHdrFtrRef = ctSectPr1.addNewHeaderReference();
ctHdrFtrRef.setType(STHdrFtr.DEFAULT);
ctHdrFtrRef.setId(document.getRelationId(header));
header.setHeaderFooter(hdr);
hdrDoc.setHdr(hdr);
header.setXWPFDocument(document);
}