用Apache POI提取Word文本
编程语言Java
POI版本为3.17 ,jar包可自行去官网下载
达到的最终效果是:去除Word中的表格、超文本、页眉、页脚、取出第一张图片存入硬盘并返回地址;同时也对doc直接修改扩展名为docx以及docx直接修改扩展名为doc这两种情况进行处理(通过捕获异常方式)。
我们的项目需求是只要一张图片,你当然可以取任意张。但注意docx文件取出的图片不是顺序的,要想按顺序读出图片请参考:https://www.cnblogs.com/ct-csu/p/8178932.html
参考文献:
http://poi.apache.org/components/document/index.html
http://poi.apache.org/apidocs/dev/org/apache/poi/hwpf/
http://poi.apache.org/apidocs/dev/org/apache/poi/xwpf/
/*** @Description: 提取word内容* @param @param path* @param @return* @return String* @author lidw* @date 2018年12月25日*/
public String doWordExtract(String path) {// String path = "D:\\temp\\temp\\test.doc";JSONObject jsonObject = new JSONObject();String content = null;String text = "";File file = new File(path);if (file.exists() && file.isFile()) {InputStream is = null;HWPFDocument doc = null;XWPFDocument docx = null;POIXMLTextExtractor extractor = null;try {is = new FileInputStream(file);if (path.endsWith(".doc")) {try {doc = new HWPFDocument(is);WordExtractor ex = new WordExtractor(doc);String[] Str = ex.getParagraphText();//通过获取段落的方式可以去页眉和页脚for (String str : Str) {if (str.indexOf("") == -1) {//去表格text += ex.stripFields(str);}}jsonObject.put("txt",text.replaceAll("|\r| ", "").replaceAll("\n", "_|_").replaceAll("[_|_]+", "_|_"));PicturesTable picturesTable = doc.getPicturesTable();List<Picture> pictures = picturesTable.getAllPictures();if (pictures == null || pictures.size() == 0) {jsonObject.put("picUrl", "");} else {// String s = new SimpleDateFormat("yyyyMMdd_HHmmss_").format(new Date());Picture picture = pictures.get(0);//Linux路径用/,Windows路径用\\,如/home/java_pic/和D:\\Desktop\\doc\\String picUrl = "/home/java_pic/" + UUID.randomUUID() + "."+ picture.suggestFileExtension();OutputStream out = new FileOutputStream(new File(picUrl));picture.writeImageContent(out);out.close();jsonObject.put("picUrl", picUrl);}} catch (OfficeXmlFileException e) {// 捕获docx文件直接将扩展名修改为doc造成的异常,按照docx文件解析is = new FileInputStream(file);docx = new XWPFDocument(is);List<XWPFParagraph> Str = docx.getParagraphs();//通过获取段落的方式可以去页眉和页脚List<String> picUrls = new ArrayList<String>();for (XWPFParagraph str : Str) {text += str.getText();text += "_|_";}jsonObject.put("txt",text.replaceAll("|\r| ", "").replaceAll("\n", "_|_").replaceAll("[_|_]+", "_|_"));List<XWPFPictureData> pictures = docx.getAllPictures();if (pictures == null || pictures.size() == 0) {jsonObject.put("picUrl", "");} else {XWPFPictureData picture = pictures.get(0);byte[] bytev = picture.getData();String picUrl = "/home/java_pic/" + UUID.randomUUID() + "."+ picture.suggestFileExtension();OutputStream out = new FileOutputStream(new File(picUrl));out.write(bytev);out.close();jsonObject.put("picUrl", picUrl);}}} else if (path.endsWith("docx")) {try {docx = new XWPFDocument(is);List<XWPFParagraph> Str = docx.getParagraphs();//通过获取段落的方式可以去页眉和页脚List<String> picUrls = new ArrayList<String>();for (XWPFParagraph str : Str) {text += str.getText();text += "_|_";}jsonObject.put("txt",text.replaceAll("|\r| ", "").replaceAll("\n", "_|_").replaceAll("[_|_]+", "_|_"));List<XWPFPictureData> pictures = docx.getAllPictures();if (pictures == null || pictures.size() == 0) {jsonObject.put("picUrl", "");} else {XWPFPictureData picture = pictures.get(0);byte[] bytev = picture.getData();String picUrl = "/home/java_pic/" + UUID.randomUUID() + "."+ picture.suggestFileExtension();OutputStream out = new FileOutputStream(new File(picUrl));out.write(bytev);out.close();jsonObject.put("picUrl", picUrl);}} catch (OLE2NotOfficeXmlFileException e) {// 捕获doc文件直接将扩展名修改为docx造成的异常,按照doc文件解析is = new FileInputStream(file);doc = new HWPFDocument(is);WordExtractor ex = new WordExtractor(doc);String[] Str = ex.getParagraphText();//通过获取段落的方式可以去页眉和页脚for (String str : Str) {if (str.indexOf("") == -1) {//去表格text += ex.stripFields(str);}}jsonObject.put("txt",text.replaceAll("|\r| ", "").replaceAll("\n", "_|_").replaceAll("[_|_]+", "_|_"));PicturesTable picturesTable = doc.getPicturesTable();List<Picture> pictures = picturesTable.getAllPictures();if (pictures == null || pictures.size() == 0) {jsonObject.put("picUrl", "");} else {Picture picture = pictures.get(0);String picUrl = "/home/java_pic/" + UUID.randomUUID() + "."+ picture.suggestFileExtension();OutputStream out = new FileOutputStream(new File(picUrl));picture.writeImageContent(out);out.close();jsonObject.put("picUrl", picUrl);}}} else {System.out.println("此文件不是word文件!");}} catch (FileNotFoundException e) {} catch (IOException e) {} finally {try {if (doc != null) {doc.close();}if (extractor != null) {extractor.close();}if (docx != null) {docx.close();}if (is != null) {is.close();}} catch (IOException e) {}}}return jsonObject.toString();
}
用Apache POI提取Word文本相关推荐
- Java poi之word文本图片内容提取
目录结构 前言 文档准备 引入Maven依赖 代码块 提取结果验证 孤勇者提取结果 青鸟提取结果对比 前言 应公司需求,需实现以下功能 word文本内容的替换: word文本内容的提取: word文档 ...
- java word apache poi 操作word模板。
apache poi 操作word模板. 操作方式: 1.对于固定格,可以遍历格子然后替换其中指定的值例如在要替换的cell写入${example} 这样格式,遍历到之后替换. 2.对于需要增长的表格 ...
- 使用java Apache poi 根据word模板生成word报表
使用java Apache poi 根据word模板生成word报表 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https ...
- [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)
[实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能) 基于Apache POI对Word进行操作 一.基于Apache POI封装的word文档工具V1. ...
- 关于Apache / poi 生成word文档之后不能正常换行的问题
近期公司项目有个把文本转成word文档的功能,开始使用io操作输出文件的方式(后缀名是docx),使用手机自带的文档浏览工具打开是没有问题的,但是在电脑上用微软office就打开有问题了,于是找了三方 ...
- apache poi使用例_使用java Apache poi 根据word模板生成word报表例子
[实例简介] 使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持. 使用说明:https://b ...
- JAVA - 使用Apache POI生成word(二) 设置纸张大小、调整纸张方向
JAVA - 使用Apache POI生成word(二) 设置纸张大小.调整纸张方向 前言 之前开发时,需要将纸张方向由纵向改为横向,查询资料得出只需要设置一下纸张的长度与宽度便可实现相同的效果. 1 ...
- JAVA - 使用Apache POI生成word(三)设置页边距
JAVA - 使用Apache POI生成word(三)设置页边距 1. pom引入依赖 <dependency><groupId>org.apache.poi</gro ...
- Apache POI(Word)教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 IT宝库整理的Apache POI Word入门教程 - 从基本到高级概念的简单简单步骤学习Apache POI Word,其中包括概述,Apache POI安装,核心类,文档,段落,边框, ...
- org.apache.poi往word模板中填充数据(word2003)
Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能.通过字面意思,我们大概知道这个API是可以用来做 j ...
最新文章
- ios alertview 链接_iOS-MobLink集成流程
- 使用神经网络提取PDF表格工具来了,支持图片,关键是能白嫖谷歌GPU资源
- 【性能优化】面试官:Java中的对象和数组都是在堆上分配的吗?
- Redis 4.0.X版本reshard出现错误的解决办法
- 在Struts2 的Action中怎样获取表单提交上来的多个checkbox的值
- my.ini修改后服务无法启动_Spring Cloud Eureka 服务实现不停机(Zero-downtime)部署
- ajax 五种状态,ajax的五种状态
- fastnest怎么一键排版_什么公众号排版编辑器可以换字体?公众号字体在哪里选择修改?...
- java servlet文件下载_Servlet实现文件下载功能
- 基于Matlab的车牌号识别
- 抖音短视频去水印网站 视频消重防删免费
- 微信小程序-如何解决onShareAppMessage转发gif格式图片不展示?【亲测有效】
- SUPER-VLAN
- python中字符串的使用04字符串大小写转换、删除空白字符
- java设计九宫格拼图软件哪个好用_抖音超火的朋友圈九宫格用什么软件做的? 抖音九宫格图片制作教程...
- 《线性代数应该这样学》读书笔记
- python语言通俗理解_慢步学习,python语言编程,来扯扯语言的学习理解
- 怎么看SaaS企业中的收入留存率?
- centos使用7za压缩文件
- java通讯录课程设计_java课程设计_通讯录_通讯簿.doc
热门文章
- pc station v15 博图_博图的pcstation是做什么的?和wincc有什么区别?怎么使用?-工业支持中心-西门子中国...
- socket写超时c语言,设置socket超时时间
- Linux移植Windows摄像头驱动,基于3.14内核usb摄像头驱动的移植
- 三菱FX3U源码在V10.5的基础上增加了禁止上传功能
- 支付宝(Alipay)支付,超详细使用教程讲解!
- Vant_根据已有地址获取code
- python股票交易接口源代码分享
- FME会员期刊(2012冬季版)
- 笨方法学 python3怎么样_笨办法学python3日常问题解决
- 不会英语能学java_不会英语可以学java吗 不会英语怎么学java?