java 提取 word 章节内容_java读取word文档,提取标题和内容

该博客介绍了一个使用Java提取Word文档章节标题和内容的方法。通过Apache POI库,代码示例展示了如何遍历文档段落,比较字体大小来识别标题和内容,并打印出来。此方法适用于处理包含多个章节且章节间有明显字体大小差异的Word文档。
摘要由CSDN通过智能技术生成

packagecom.w.test;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.List;importjava.util.regex.Matcher;importjava.util.regex.Pattern;importorg.apache.poi.POIXMLDocument;importorg.apache.poi.POIXMLTextExtractor;importorg.apache.poi.hwpf.HWPFDocument;importorg.apache.poi.hwpf.extractor.WordExtractor;importorg.apache.poi.hwpf.usermodel.CharacterRun;importorg.apache.poi.hwpf.usermodel.Paragraph;importorg.apache.poi.hwpf.usermodel.Range;importorg.apache.poi.openxml4j.opc.OPCPackage;importorg.apache.poi.poifs.filesystem.POIFSFileSystem;importorg.apache.poi.xwpf.extractor.XWPFWordExtractor;importorg.apache.poi.xwpf.usermodel.XWPFDocument;importorg.apache.poi.xwpf.usermodel.XWPFParagraph;importorg.apache.poi.xwpf.usermodel.XWPFRun;importcom.example.model.Policy_content;public classGetWord {public static voidmain(String[] args) {//TODO Auto-generated method stub

try{

List list = new ArrayList<>();

InputStream is= new FileInputStream(new File("文件路径")); //需要将文件路更改为word文档所在路径。

POIFSFileSystem fs= newPOIFSFileSystem(is);

HWPFDocument document= newHWPFDocument(fs);

Range range=document.getRange();

CharacterRun run1= null;//用来存储第一行内容的属性

CharacterRun run2 = null;//用来存储第二行内容的属性

int q=1;for (int i = 0; i < range.numParagraphs()-1; i++) {

Paragraph para1= range.getParagraph(i);//获取第i段

Paragraph para2 = range.getParagraph(i+1);//获取第i段

int t=i; //记录当前分析的段落数

String paratext1= para1.text().trim().replaceAll("\r\n", ""); //当前段落和下一段

String paratext2 = para2.text().trim().replaceAll("\r\n", "");

run1=para1.getCharacterRun(0);

run2=para2.getCharacterRun(0);if (paratext1.length() > 0&&paratext2.length() > 0) {//这个if语句为的是去除大标题,连续三个段落字体大小递减就跳过

if(run1.getFontSize()>run2.getFontSize()&&run2.getFontSize()>range.getParagraph(i+2).getCharacterRun(0).getFontSize()) {continue;

}//连续两段字体格式不同

if(run1.getFontSize()>run2.getFontSize()) {

String content=paratext2;

run1=run2; //从新定位run1 run2

run2=range.getParagraph(t+2).getCharacterRun(0);

t=t+1;while(run1.getFontSize()==run2.getFontSize()) {//连续的相同

content+=range.getParagraph(t+1).text().trim().replaceAll("\r\n", "");

run1=run2;

run2=range.getParagraph(t+2).getCharacterRun(0);

t++;

}if(paratext1.indexOf("HYPERLINK")==-1&&content.indexOf("HYPERLINK")==-1) {

System.out.println(q+"标题"+paratext1+"\t内容"+content);

i=t;

q++;

}

}

}

}

}catch(Exception e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值