XWPFDocument word导出相关(分栏,纸张大小,页面排版,段落字体大小)

改造了一个word导出功能,用到了之前没用到过的冷门方法,我当时百度找方法的时候也是很绝望,就是很冷门,有的博客看到关键地方,还就要钱了,所以我要在这里记录一下,省的以后我忘了,重蹈覆辙,另外也是希望能够帮助到大家!

1.首先用XWPFDocument导出,需要在pom里先引入依赖,下边的依赖都是相关的,有没用到的,我也没管了,先导入,方法管用就行,最开始我在网上粘贴的依赖放进去,是有版本号报错的,百度说是版本太高,不兼容了,现在这个版本号是我挨个试出来的,如果粘过去你们那不管用,就换了试试别的版本号,另外还有一种特殊情况,比如说这个依赖我导入,但依然是报红的状态,但方法能引用到,也不妨碍启动,就很无奈,反正就多试试呗。

        
        
            cn.hutool
            hutool-all
            4.3.2
        

        
        
            com.alibaba
            easyexcel
            2.2.6
            
                
                    slf4j-api
                    org.slf4j
                
            
        
        
        
            net.lingala.zip4j
            zip4j
            2.6.4
        
        
        
            cn.hutool
            hutool-all
            5.7.17
        

        
            org.apache.poi
            ooxml-schemas
            1.3
            
                
                    xmlbeans
                    org.apache.xmlbeans
                
            
        

        
            org.apache.poi
            poi
            4.1.1
            3.17
        
        
            org.apache.poi
            poi-ooxml
            4.1.2
            3.17
        

2. 好,下边列举一下我用到的冷门方法

初始化doc ,设置上sectPr和pgSz,其实设置的这些属性像是html的标签,使用属性就要先设置属性,所以才在使用前先判断是否已经设置了属性

        XWPFDocument doc = new XWPFDocument();
        CTBody body = doc.getDocument().getBody();
        if (!body.isSetSectPr()) {
            body.addNewSectPr();
        }

        CTSectPr section = body.getSectPr();
        if (!section.isSetPgSz()) {
            section.addNewPgSz();
        }
        //设置分栏
        if (!section.isSetCols()) {
            section.addNewCols();
        }
        CTColumns cols = section.getCols();
        //分栏间距
        cols.setSpace(BigInteger.valueOf(3000));
        //分几栏
        cols.setNum(BigInteger.valueOf(2));

        //将纸张设置为A3大小的
        CTPageSz pageSize = section.getPgSz();
        pageSize.setW(BigInteger.valueOf(23800));
        pageSize.setH(BigInteger.valueOf(16840));

        //横向 页面排版
        pageSize.setOrient(STPageOrientation.PORTRAIT);
        
        //下边标题 考试介绍 和考试时间总分的设置 都一类型的,初始化段落,然后各种属性设置

        // 标题(段落)
        XWPFParagraph title = doc.createParagraph();
        title.setAlignment(ParagraphAlignment.CENTER);
        XWPFRun titleRun = title.createRun();
        titleRun.setText(exam.getName());
        titleRun.setBold(true);
        titleRun.setFontSize(35);
        titleRun.addBreak();

        // 考试介绍(段落)
        XWPFParagraph desc = doc.createParagraph();
        desc.setAlignment(ParagraphAlignment.LEFT);
        XWPFRun descRun = desc.createRun();
        descRun.setText(exam.getExamDesc());
        descRun.setBold(true);
        descRun.setFontSize(15);
        descRun.addBreak();

        // 考试时间和总分
        XWPFParagraph score = doc.createParagraph();
        score.setAlignment(ParagraphAlignment.LEFT);
        XWPFRun scoreRun = score.createRun();
        scoreRun.setText("考试时间:" + exam.getTotalTime() + " 分钟,   总分:" + 
        exam.getTotalScore());
        scoreRun.setBold(true);
        scoreRun.setFontSize(15);
        scoreRun.addBreak();

        return doc;

          我的这些设置出来的效果是这样的

 XWPFDocument word导出相关(分栏,纸张大小,页面排版,段落字体大小)_第1张图片

大家看吧,说不定呢就哪个方法用到了。

你可能感兴趣的:(word导出,XWPFDocument,java)