• 随笔记录①—利用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("
    ", "");   //当前段落的内容并去除换行
                 String paratext2 = para_2.text().trim().replaceAll("
    ", "");  //当前段落的内容并去除换行
                 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+"	"+content);
                                 i=setparagraph;
                 }
                }          
        }
    }

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

  • 相关阅读:
    输入法或搜索类软件评价
    Money-去哪了每日站立会议
    Money去哪了- 每日站立会议
    Money去哪了- 每日站立会议
    课下作业-典型用户描述,描绘用户场景
    Money去哪了-每日站立会议
    Money去哪了- 每日站立会议
    Money-去哪了每日站立会议
    Money去哪了- 每日站立会议
    Money-去哪了每日站立会议
  • 原文地址:https://www.cnblogs.com/liulala2017/p/10583802.html
Copyright © 2020-2023  润新知