java 读取word内容

文章介绍了如何使用ApachePOI库读取.doc文件并提取内容,同时提到处理.docx和.pdf文件的方法,包括正确引入poi-scratchpad和使用PDFBox。着重于文本内容的提取和后续扩展性。
摘要由CSDN通过智能技术生成

接到一个任务,要读取doc文件的内容。解析里面的内容,进行一个处理和返回。

读取doc:

看了

很多文章,基本都是:

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class WordImportUtils {

    public static String readWordFile(String path) {
        File file = new File(path);
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream((file.getAbsolutePath()));
            HWPFDocument document = new HWPFDocument(fileInputStream);
            WordExtractor extractor = new WordExtractor(document);
            return extractor.getText();//此处还有很多别的方法可以使用
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fileInputStream != null){
                try {
                    fileInputStream.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
        return "";
    }

    public static void main(String args[]) throws Exception {
        String path="D:\\tmp\\invest.doc";
        String content = readWordFile(path);
        System.out.println(content);
    }

}
  • extractor对象的几个get方法说明:
    • getText() :返回String,全文内容
    • getMainTextboxText() 返回String[],读取的是多个文本框中的内容
    • getParagraphText() 返回String[],读取的是多个自然段的内容
  • 读取的图片都没了,表格只保留了文字部分,格式都没有了。其余的格式(换行、回车等)均被保留

里面
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;

这两行报错。

看了下引用:

    implementation 'org.apache.poi:poi:3.16'
    implementation 'org.apache.poi:poi-ooxml:3.16'

细看了下代码,确实没有。就直接搜 WordExtractor

原来是少了:poi-scratchpad 的引用  引用版本查询

implementation 'org.apache.poi:poi-scratchpad:3.16'

这样就正常。 

如果是docx或者pdf格式怎么处理呢?

读取docx

import org.apache.pdfbox.io.RandomAccessBuffer;
import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.commons.lang.StringUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class WordImportUtils {

    public static void main(String args[]) throws Exception {
        String path="D:\\tmp\\invest2.docx";
        String docx = readWord(path);
        System.out.println(docx);
    }
    
    public static String readWord(String path) throws Exception {
        File file = new File(path);
        String suffix =  StringUtils.substringAfterLast(path, ".");
        FileInputStream fileInputStream = new FileInputStream((file.getAbsolutePath()));
        return readWord(fileInputStream, suffix);
    }

    public static String readWord(InputStream inputStream, String suffix) throws Exception{
        if ("doc".equals(suffix)) {
            HWPFDocument document = new HWPFDocument(inputStream);
            WordExtractor extractor = new WordExtractor(document);
            return extractor.getText();
        } else if ("docx".equals(suffix)) {
            OPCPackage opcPackage = OPCPackage.open(inputStream);
            POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);
            return extractor.getText();
        } else if("pdf".equals(suffix)){
            RandomAccessBuffer rab = new RandomAccessBuffer(inputStream);
            PDFParser pdfParser = new PDFParser(rab);
            pdfParser.parse();
            PDDocument document = pdfParser.getPDDocument();
            // 获取页码
            int pages = document.getNumberOfPages();
            PDFTextStripper stripper = new PDFTextStripper();
            // 设置按顺序输出
            stripper.setSortByPosition(true);
            stripper.setStartPage(1);
            stripper.setEndPage(pages);
            return stripper.getText(document);
        }else{
            return null;
        }
    }

   

}

pdf的引用包:

    implementation 'org.apache.pdfbox:fontbox:2.0.22'
    implementation 'org.apache.pdfbox:pdfbox:2.0.22'

文件上传后读取

controller

@ApiOperation("读取word")
@RequestMapping(value = "/extractWordFile", method = RequestMethod.POST)
public ResultVO extractWordFile(@RequestPart("file") MultipartFile file) throws Exception {
    Map<String, Object> data = importDocService.extractWordFile(file);
    return ResultVO.createSuccess(data);
}

service

@Service
public class ImportDocService {
    private static final Logger logger = LoggerFactory.getLogger(VisitImportDocService.class);

    public Map<String, Object> extractWordFile(MultipartFile file) throws Exception{
        String fileSuffix = StringUtils.substringAfterLast(file.getOriginalFilename(), ".");
        String data = WordImportUtils.readWord(file.getInputStream(), fileSuffix);
        // 根据实际的要求去获取到副标题和内容
        String subFirstFix = "";
        String content = "";
        Map<String, Object> result = new HashMap<>();
        result.put("subHead", subFirstFix);
        result.put("content", content);
        return result;
    }

}

总结:

        读取doc文件主要是 poi-scratchpad的正确引入。这边主要是处理文本的。后续有需要处理其它的,再进行添加处理

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值