java 读取word内容

接到一个任务,要读取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的正确引入。这边主要是处理文本的。后续有需要处理其它的,再进行添加处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/632586.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 和 opencv 开发环境搭建

本文详细说明给android项目添加opencv库的详细步骤&#xff0c;并通过实现图片灰度化来查看配置是否成功。 下载OPENCV ANDROID SDK 到官网下载 打开 https://opencv.org/releases/ 选择android&#xff0c;下载完成后解压出下面的文件&#xff1a; 安装android sdk 和 ndk …

快手二面:节流和防抖知道吗?

面试官:节流与防抖&#xff0c;说说两者各自适用场景&#xff1f; 回答&#xff1a;面试官&#xff0c;在前端开发中&#xff0c;节流&#xff08;Throttle&#xff09;和防抖&#xff08;Debounce&#xff09;是两种常用的优化高频率执行JavaScript代码的技术。我将分别阐述它…

1.17号网络

网络属性 1> 对于套接字而言&#xff0c;在不同的层中&#xff0c;可以设置不同的属性&#xff0c;如端口号快速重用、超时时间、设置广播、加入多播组等等 2> 关于网络属性&#xff0c;有两个函数&#xff0c;分别是 setsockopt、getsockopt #include <sys/types.h…

数据库(基础理论+MySQL安装和部署)

目录 基础理论 1.1 什么是数据库&#xff1f; 1.2 DBMS数据库管理系统 1.3 数据库与文件系统的区别 1.4 数据库的发展和规划 1.5 常见的数据库 1.5.1 关系型数据库 1.5.2 非关系型数据库 1.6 DBMS支持的数据模型 层次模型 网状模型 关系模型 面向对象模型&#xf…

T2T VIT 学习笔记(附代码)

论文地址&#xff1a;https://arxiv.org/abs/2101.11986 代码地址&#xff1a;https://github.com/PaddlePaddle/PASSL/tree/main/configs/t2t_vit 1.是什么&#xff1f; T2T-ViT是一种基于Transformer的视觉模型&#xff0c;用于图像分类任务。它通过将图像分割成小的图块&…

在uni-app中使用sku插件,实现商品详情页规格展示和交互。

商品详情 - SKU 模块 学会使用插件市场&#xff0c;下载并使用 SKU 组件&#xff0c;实现商品详情页规格展示和交互。 存货单位&#xff08;SKU&#xff09; SKU 概念 存货单位&#xff08;Stock Keeping Unit&#xff09;&#xff0c;库存管理的最小可用单元&#xff0c;通…

【MyBatis-Plus】逻辑删除

对于一些比较重要的数据&#xff0c;我们通常采用逻辑删除。&#xff08;即用一个字段表示是否删除&#xff0c;实际上始终在数据库没有被删除&#xff09; 当逻辑删除字段为 true&#xff0c;业务处理的时候会自动把该数据当做一个“不存在”的数据处理。&#xff08;即不处理…

这篇Java基础快速入门学习教程,让我至少少走3个月弯路

一、作为刚接触Java的新手&#xff0c;先了解Java的基础。 Java 基本语法、Java 平台应用、Java的核心概念&#xff1a;JVM、JDK、JRE以及Java面向对象思想&#xff0c;同时要会学到如何在系统中搭建Java开发环境&#xff0c;以及如何利用第三方工具进行Java程序的开发。 还有…

计算机网络课程设计-Tracert 与 Ping 程序设计与实现

目录 前言 1 实验题目 2 实验目的 3 实验内容 3.1 步骤 3.2 关键代码 3.2.1 发送ICMP数据报 3.2.2 解析收到的数据报 4 实验结果与分析 5 代码 5.1 ping代码 5.2 Tracert代码 前言 本实验为计算机网络课程设计内容&#xff0c;基本上所有代码都是根据指导书给的附录…

BigeMap在Unity3d中的应用,助力数字孪生

1. 首先需要用到3个软件&#xff0c;unity&#xff0c;gis office 和 bigemap离线服务器 Unity下载地址:点击前往下载页面(Unity需要 Unity 2021.3.2f1之后的版本) Gis office下载地址:点击前往下载页面 Bigemap离线服务器 下载地址: 点击前往下载页面 Unity用于数字孪生项…

Flutter中的图片查看器:使用photo_view库

在移动应用开发中&#xff0c;图片查看器是一个常见的需求。Flutter提供了许多库来简化这一过程&#xff0c;其中photo_view库是一个强大而灵活的选择。本文将介绍photo_view库的基本概念以及如何在Flutter应用中使用它来实现漂亮的图片查看体验。 1. 什么是photo_view库&…

ilqr 算法说明

1 Introduction 希望能用比较简单的方式将ilqr算法进行整理和总结。 2 HJB方程 假定我们现在需要完成一个从A点到B点的任务&#xff0c;执行这段任务的时候&#xff0c;每一步都需要消耗能量&#xff0c;可以用下面这个图表示。 我们在执行这个A点到B点的任务的时候&#xf…

什么是区块链?

区块链 区块链 &#xff08;英语&#xff1a;blockchain&#xff09;是借由 密码学 与 共识机制 等技术建立&#xff0c;存储数据的 保证不可篡改和不可伪造的 分布式技术。 什么是区块 区块 就是将一批数据打包在一起&#xff0c;并且给打包出来的区块编号。第一个区块的编…

AT24C02读写操作 一

//AT24C02初始化 void AT24C02_Init(void) { IIC_Init(); } //AT24C02的字节写入 写一个字节 void AT24C02_WordWrite(uint8_Address,uint8_t Data) { //1。主机发送开始信号 IIC_StartSignal(); //2.主机发送器件地址 写操作 IIC_SentBytes(0xA0); //3.主机等侍从机应…

vue3-事件处理

事件监听 DOM 事件监听指令 v-on 简写 v-on:click"handler" 或者 click"handler"事件处理器 (handler) 的值可以是&#xff1a; 内联事件处理器&#xff1a;比如 click 方法事件处理器&#xff1a;一个指向组件上定义的方法的属性名或是路径。 在内联…

【干货】网络安全之URL过滤

热门IT课程【视频教程】-华为/思科/红帽/oraclehttps://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 URL过滤是一种针对用户的URL请求进行上网控制的技术&#xff0c;通过允许或禁止用户访问某些网页资源&#xff0c;达到规范上网行为和降低安全…

matlab行操作快?还是列操作快?

在MATLAB中&#xff0c;通常情况下&#xff0c;对矩阵的列进行操作比对行进行操作更有效率。这是因为MATLAB中内存是按列存储的&#xff0c;因此按列访问数据会更加连续&#xff0c;从而提高访问速度。 一、实例代码 以下是一个简单的测试代码&#xff0c; % 测试矩阵大小 ma…

Python实战 -- PySide6 制作天气查询软件

一、环境准备 开发环境&#xff1a;Python 3.9.2 pycharm PySide6 申请天气情况 API &#xff1a;https://console.amap.com/dev/key/app designer 设计 ui 目录下 Weather.ui 转换为 Weather.py 结果显示 二、完整代码 import sysfrom PySide6 import QtWidgetsimport…

redis持久化机制:RDB和AOF

Redis的持久化机制主要依赖于两种方法&#xff1a;RDB&#xff08;Redis Database&#xff09;和AOF&#xff08;Append Only File&#xff09;。这两种机制可以单独使用&#xff0c;也可以同时使用&#xff0c;以提高数据的持久性和可靠性。 RDB&#xff08;Redis Database&a…

Mysql深度分页优化的一个实践

问题简述: 最近在工作中遇到了大数据量的查询场景, 日产100w左右明细, 会查询近90天内的数据, 总数据量约1亿, 业务要求支持分页查询与导出. 无论是分页或导出都涉及到深度分页查询, mysql通过limit/offset实现的深度分页查询会存在全表扫描的问题, 比如offset1000w, limit10…