随笔记录①—利用poi读取Word中的标题和内容

使用时间:4小时

使用poi方法将word中的内容提取出来,并输出到控制台或者存储到数据库
poi.jar下载地址:https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.tar.gz
需要导入的包

根据标题和内容字体大小的不同,寻找所需要的段落和标题,并判断是标题还是内容。
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class poi_word {

    public static void main(String[] args) throws IOException {
            InputStream is = new FileInputStream(new File("path")); //读取文件
            POIFSFileSystem fs = new POIFSFileSystem(is);
            @SuppressWarnings("resource")
            HWPFDocument document = new HWPFDocument(fs);
            Range range = document.getRange();   //存储word内容到document中

            for (int i = 0; i < range.numParagraphs()-2; i++) {  //numparagraphs代表段落总数
              int setparagraph=i;              //记录当前段落
              Paragraph para_1 = range.getParagraph(i);// 获取第i段
              Paragraph para_2 = range.getParagraph(i+1);// 获取第i+1段   
              Paragraph para_3 = range.getParagraph(i+2);// 获取第i+2段 
            
             String paratext1 = para_1.text().trim().replaceAll("\r\n", "");   //当前段落的内容并去除换行
             String paratext2 = para_2.text().trim().replaceAll("\r\n", "");  //当前段落的内容并去除换行
             CharacterRun run1=para_1.getCharacterRun(0);
             CharacterRun run2=para_2.getCharacterRun(0);   
             CharacterRun run3=para_3.getCharacterRun(0);  //段落属性
             if (paratext1.length() > 0&&paratext2.length() > 0) {
                 
                     if(run1.getFontSize()>run2.getFontSize()&&run2.getFontSize()>run3.getFontSize())  continue;  // 当连续三个及以上的字体大小不同的段落存在时则跳过当前循环,直到两个段落存在(找到小标题和内容)           
                     String content="";
                         if(run1.getFontSize()>=run2.getFontSize()) { //当两段内容字体大小为大于时 则为标题和内容  相等时则同为内容
                             content +=paratext2;    //第i+1段为内容
                             run1=run2;
                             run2=run3;    //顺序重新定位段落
                             setparagraph++;
                         }
                             System.out.println(paratext1+"\t"+content);
                             i=setparagraph;
             }
            }          
    }
}

参考来源:https://www.cnblogs.com/wys-373/p/10568322.html

猜你喜欢

转载自www.cnblogs.com/liulala2017/p/10583802.html
今日推荐