java读取word文档中的文字和图片,doc和docx兼容版

news/2024/11/27 1:35:34/

也是我东抄抄,西抄抄拿来测试改装的,话不多说,直接上代码 


 

<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.0.0</version></dependency>

这是maven导入的包

package com.hl.utils;import java.io.*;
import java.util.ArrayList;
import java.util.List;import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.*;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;/*** 类 MsWordExtractor用来提取Microsoft Word 里面的文字和图片* 注意提取图片后,可以把图片放在由用户指定的路径下面** @author Zhou Xiaolong* @email shaolongchou@126.com*/public class DocUtil {private HWPFDocument doc = null;private Range range = null;private static List<Picture> pictsList = null;// 用来标记是否存在图片boolean hasPic = false;/*** 构造器,注意到所传入的参数必须是微软word文档的名字** @param msDocName* @throws IOException* @throws FileNotFoundException*/public DocUtil(String msDocName) {try {doc = new HWPFDocument(new FileInputStream(msDocName));range = doc.getRange();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/*** 默认构造器,为私有函数*/private DocUtil() {}/*** 从word文档中获取所有文字** @return*/public String getAllText() {int numP = range.numParagraphs();StringBuffer ret = new StringBuffer();for (int i = 0; i < numP; ++i) {//从每一段落中获取文字Paragraph p = range.getParagraph(i);ret.append(p.text());}return ret.toString();}/*** 从word里面提取图片** @return*/private boolean extractPictures() {pictsList = new ArrayList();// 得到文档的数据流byte[] dataStream = doc.getDataStream();int numChar = range.numCharacterRuns();PicturesTable pTable = new PicturesTable(doc, dataStream, new byte[1024]);for (int j = 0; j < numChar; ++j) {CharacterRun cRun = range.getCharacterRun(j);// 是否有图片boolean has = pTable.hasPicture(cRun);if (has) {Picture picture = pTable.extractPicture(cRun, true);// 大于300bites的图片我们才弄下来,消除word中莫名的小图片的影响if (picture.getSize() > 300) {pictsList.add(picture);hasPic = true;}}}return hasPic;}/*** word文档里有几张图片,使用这个函数之前,* 必须先使用函数 extractPictures()** @return*/public int numPictures() {if (!hasPic)return 0;return pictsList.size();}/*** 把提取的图片保存到用户指定的位置** @param picNames, 图片要保存的路径,最好完整地写上图片类型* @return*/private boolean writePictures(String[] picNames, String savePath) {int size = pictsList.size();if (size == 0)return false;for (int i = 0; i < size; ++i) {Picture p = pictsList.get(i);try {p.writeImageContent(new FileOutputStream(savePath + "/" + picNames[i]));} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}return true;}// maven太好用了// 读取srcFile源word文件docx文字// 读取srcFile源word文件docx中的image图片并且存放在文件夹imageFile中private static String readDocxImage(String srcFile, String imageFile) {String path = srcFile;File file = new File(path);try {// 用XWPFWordExtractor来获取文字FileInputStream fis = new FileInputStream(file);XWPFDocument document = new XWPFDocument(fis);XWPFWordExtractor xwpfWordExtractor = new XWPFWordExtractor(document);String text = xwpfWordExtractor.getText();System.out.println(text);// 用XWPFDocument的getAllPictures来获取所有的图片List<XWPFPictureData> picList = document.getAllPictures();for (XWPFPictureData pic : picList) {byte[] bytev = pic.getData();// 大于300bites的图片我们才弄下来,消除word中莫名的小图片的影响if (bytev.length > 300) {FileOutputStream fos = new FileOutputStream(imageFile + "/" + pic.getFileName());fos.write(bytev);}}fis.close();return text;} catch (IOException e) {e.printStackTrace();}return null;}private static void readDocImage(String file, String savePath) {DocUtil extr = new DocUtil(file);String str = extr.getAllText().trim();extr.extractPictures();int num = extr.numPictures();String names[] = new String[num];for (int i = 0; i < num; ++i) {String imageType = pictsList.get(i).getMimeType().split("/")[1];names[i] = "image" + i + "." + imageType;}System.out.println(str);extr.writePictures(names, savePath);}public static void readWordImage(String file, String savePath) {if (null == savePath) {savePath = "";}if (file.endsWith(".doc")) {readDocImage(file, savePath);} else if (file.endsWith(".docx")) {readDocxImage(file, savePath);} else {return;}}public static void main(String[] args) {readWordImage("C:\\Users\\Administrator\\Desktop\\Doc1.doc", "C:\\Users\\Administrator\\Desktop");}}

 


http://www.ppmy.cn/news/144966.html

相关文章

EndNote20 for Mac 与搭载Apple M1芯片Mac版Word不兼容的解决方案(新发布的EndNote 20.1更新版可适配Apple M1)

2021年6月&#xff0c;EndNote20发布了EndNote 20.1更新版。该版本解决了与搭载Apple M1芯片的Mac版Word不兼容的问题。要升级EndNote 20.1&#xff0c;理论上&#xff0c;在启动EndNote20后会弹出升级界面&#xff0c;选择升级即可。或者&#xff0c;参考以下官网升级操作说明…

电脑计算机配置应用程序兼容性,电脑怎么打开兼容模式怎么办

1. windows7怎么开兼容模式 启用兼容模式就可以了,具体步骤如下: 1. 点击右下角“开始”菜单,单击“运行”,在弹出的对话框里键入“gpedit.msc”,单击“确定”。 2. 此时进入组策略编辑器界面,双击“计算机配置”,进入下一步骤。 3.找到“管理模板”选项,双击,进入下一…

32 位和 64 位版本的 Office 2010 之间的兼容性

32 位和 64 位版本的 Office 2010 之间的兼容性 Office 2010 摘要&#xff1a;针对处理 2GB 或更多数据的客户&#xff0c;Microsoft Office 2010 现在作为 64 位版本提供。本文讨论有关 32 位版本与新的 64 位版本和旧的 32 位 Office 应用程序之间兼容性的问题&#xff0c;并…

matlab 兼容,matlab版本兼容问题

解决Advisor在高版本matlab中无法运行的问题_机械/仪表_工程科技_专业资料。解决了Advisor2002无法在高版本运行的问题,我在Matlab2008a和2010上都运行成功!文档内容...... matlab安装解决措施完全版_计算机软件及应用_IT/计算机_专业资料。matlab Matlab7.0 安装问题总结 在安…

Word的扩展名是什么

文件扩展名也称为文件的后缀名&#xff0c;是操作系统用来标志文件类型的一种机制。通常来说&#xff0c;一个扩展名是跟在主文件名后面的&#xff0c;由一个点&#xff08;分隔符&#xff09;来与主文件名分隔。在文件夹中寻找 Word 文档的时候很多的用户都会通过扩展名去找&a…

JAVA编写Word

文章来源于GitEE借鉴&#xff0c;如果冒犯&#xff0c;请告知 java编写Word 这里的操作是来自GitEE中的。GitEE真是好&#xff0c;开源项目真不少。 官网 wordgo.cc WordGO - 让Java生成word文档更容易 手动导入jar包 IDEA导入&#xff1a;点击File-Project Structure&…

计算机兼容性测试怎么做,如何进行兼容性测试

原标题:如何进行兼容性测试 一、什么是兼容性测试 很多人都知道兼容性测试,但是却很少能准确理解兼容性测试,大多都只会想到浏览器的兼容;实际兼容性还有其他内容,包括web兼容和APP兼容;那么下面咱们先说说什么是兼容性测试: 兼容测试(Compatibility Test Suite )官方简…

Microsoft Office Word、Excel 和 PowerPoint 文件格式兼容包

[b]*** for Microsoft Office XP 和 2003 系统 Word、Excel 或 PowerPoint 程序的用户 ***[/b] 打开、编辑和保存采用 Open XML 文件格式的文档、工作簿和演示文稿&#xff0c;这种格式是从 Office 2007 开始引入到 Microsoft Office Word、Excel 和 PowerPoint 中的并在 [i]Of…