java poi word 解决启用分栏后 页眉 页脚不生效的问题_使用poi给word增加页眉 加不上_资深bug制造机的博客-CSDN博客

一 不分栏

创建页眉

    /**     * 创建默认页眉     *     * @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);     }   

文章知识点与官方知识档案匹配,可进一步学习相关知识

Java技能树首页概览115127 人正在系统学习中


原网址: 访问
创建于: 2023-05-05 16:18:03
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论