当前位置: 首页 > news >正文

word、pdf文档内容提取工具类

word、pdf文档内容提取工具类

1.依赖

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.5</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>5.2.5</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.5</version> <!-- 如果有 DOCX 相关 -->
</dependency>
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>3.0.5</version>
</dependency>

2.代码

import cn.hutool.core.util.StrUtil;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Locale;
/**
* @Description 文档提取工具类
* @Date 2025/9/29 17:32
*/public class DocumentTextExtractUtil {public static String extractText(InputStream inputStream, String fileType) throws IOException {if (inputStream == null) return "";if (StrUtil.isBlank(fileType)) throw new IllegalArgumentException("文件类型不能为空");String ft = normalizeFileType(fileType);byte[] data = toByteArray(inputStream);return switch (ft) {case "pdf" -> extractPdfText(data);case "docx" -> extractDocxText(data);case "doc" -> extractDocText(data);default -> new String(data, StandardCharsets.UTF_8);};}private static String normalizeFileType(String fileType) {String ft = fileType.trim().toLowerCase(Locale.ROOT);if (ft.startsWith(".")) ft = ft.substring(1);if (ft.contains("/")) {ft = ft.substring(ft.indexOf('/') + 1);if (ft.contains("+")) ft = ft.substring(0, ft.indexOf('+'));}return ft;}private static String extractPdfText(byte[] data) throws IOException {try (PDDocument doc = Loader.loadPDF(data)) { // 3.x 用 Loader.loadPDFPDFTextStripper stripper = new PDFTextStripper();stripper.setSortByPosition(true);String text = stripper.getText(doc);return text == null ? "" : text.trim();}}private static String extractDocxText(byte[] data) throws IOException {try (XWPFDocument doc = new XWPFDocument(new ByteArrayInputStream(data))) {StringBuilder sb = new StringBuilder();List<XWPFParagraph> paragraphs = doc.getParagraphs();for (XWPFParagraph p : paragraphs) {String t = p.getText();if (t != null && !t.isEmpty()) {sb.append(t).append('\n');}}return sb.toString().trim();}}private static String extractDocText(byte[] data) throws IOException {try (HWPFDocument doc = new HWPFDocument(new ByteArrayInputStream(data))) {WordExtractor extractor = new WordExtractor(doc);String[] paragraphs = extractor.getParagraphText();StringBuilder sb = new StringBuilder();if (paragraphs != null) {for (String p : paragraphs) {if (p == null) continue;String clean = p.replaceAll("\\u0000", "").trim();if (!clean.isEmpty()) sb.append(clean).append('\n');}}return sb.toString().trim();}}private static byte[] toByteArray(InputStream in) throws IOException {ByteArrayOutputStream baos = new ByteArrayOutputStream(8192);byte[] buf = new byte[8192];int r;while ((r = in.read(buf)) != -1) {baos.write(buf, 0, r);}return baos.toByteArray();}
}

3.如何使用

try (InputStream textStream = new ByteArrayInputStream(content)) {String text = DocumentTextExtractUtil.extractText(textStream, fileType.toLowerCase());} catch (Exception e) {log.warn("文本提取失败,文件: {},类型: {}", fileName, fileType, e);}
http://www.dtcms.com/a/483122.html

相关文章:

  • 【OpenHarmony多媒体开发大总结】从播放到转码全流程+实测踩坑便签,一文打通AVPlayer/SoundPool/录屏/缩略图/元数据提取
  • 02117 信息组织【第六章】
  • 【Linux内核】Linux内核裁剪完全指南:从理论到实战的系统优化
  • 旅游公司网站难做吗外贸英文网站模板
  • 尚品本色木门网站是哪个公司做的猎头做单网站
  • Linux的动态库和静态库
  • 参透测试(1):普通权限弱口令/弱加密方式/未授权访问
  • 嘉兴专业网站排名推广网站建设的后期服务要包括什么软件
  • 统计订单总数并列出排名
  • **标题:发散创新:探索Deno框架下的应用开发之旅**摘要:本文将深入探讨Den
  • 网站icp备案新规药品网站 icp
  • Linux对象管理机制
  • 网站建设实训考试做电商的步骤
  • 微信小程序uni.request 返回值存在精度丢失问题
  • 做外贸上哪些网站鹤壁集团网站建设
  • 惠城网站建设有哪些网站建设欧美
  • 注册 区块链节点
  • 硅谷甄选(续2)首页
  • 茂名建设公司网站wordpress写书typecho主题
  • 上海网站建设软件下载唐山的做网站的企业
  • 图解网络(科普版)
  • TensorFlow Implementation of Content-Based Filtering|基于内容过滤的TensorFlow实现
  • 【Pr】Adobe Premiere Pro 2025 学习笔记-01工作流实操
  • 手机端网站模板下载开发者助手app
  • 怎样做网站代理拼多多怎么开店
  • php按步骤做网站苏州企业网站建设服务中心
  • 月报 Vol.04:新增 async test 与 async fn main 语法,新增 lexmatch 表达式
  • 04--CSS基础(3)
  • C语言--函数
  • `String`、`StringBuilder` 和 `StringBuffer`区别卓望一面面试题