POI之Word文档读取-yellowcong
来源:互联网 发布:那个软件接收香港电台 编辑:程序博客网 时间:2024/06/05 11:53
POI对于Doc的支持冒失对于新版本的Word不支持,支持的是Word老版本,对于docx结尾的,支持不是特别的好,本文主要分三部分,1、Word的文字不分的读取,2、Wrod图片的读取,3、Word表格读取
环境搭建
<!-- excel --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.17</version></dependency><!-- word --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.17</version></dependency><!-- xlsx --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version></dependency><!-- xlsx 依赖这个包 --><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.17</version></dependency>
文字读取
文字操作中,可以通过
HWPFDocument
直接读取,也可以获取到Range
对象后读取
String BASE_PATH = "D:\\笔记\\服务器学习\\bae\\";File file = new File(BASE_PATH + "BAE 服务器文件目录问题.doc");HWPFDocument doc = new HWPFDocument(new FileInputStream(file));//通过 Doc对象直接获取TextStringBuilder sb = doc.getText();//System.out.println(sb.toString());//通过Range对象获取TextRange range = doc.getRange();String text = range.text();
图片读取
Doc获取文档中的所有图片,并存储,其中
Picture
对象中,getContent()
可获取字节流,然后获取字节数据,自己写出来,也可以通过writeImageContent
来直接写,图片的开始位置可以获取,但是结束位置没有
//获取doc中的图片数//获取doc中的图片数List<Picture> pics = doc.getPicturesTable().getAllPictures();for(Picture pic:pics){ //图片在doc文件中的位置,分析Doc 转化成其他文本时需要用到 int start = pic.getStartOffset(); int width = pic.getWidth(); int height = pic.getHeight(); String mimeType = pic.getMimeType(); //文件名称 String name = pic.suggestFullFileName(); //文件后缀 String exts= pic.suggestFileExtension(); //文件类型 PictureType type = pic.suggestPictureType(); System.out.printf("开始位置%d\t图片大小度%d,高%d,\t图片类型%s\r\n",start,width,height,mimeType);}/** * 也可以自己写方法 * @param imgByte * @throws Exception */public static void copyByteToFile(byte[] imgByte,String path) throws Exception { InputStream in = new ByteInputStream(imgByte, 0, imgByte.length); byte[] buff = new byte[1024]; String fileName = UUID.randomUUID().toString().substring(0, 6); OutputStream out = new FileOutputStream(new File(path + fileName + ".jpg")); int len = 0; while ((len = in.read(buff)) > 0) { out.write(buff, 0, len); } out.flush(); out.close(); in.close();}/** * 通过Picture 自己类中的读写方法 * @param pics * @param path */public static void copyPic2Disk(List<Picture> pics,File path){ if(pics == null || pics.size() <=0){ return; } if(!path.isDirectory()){ throw new RuntimeException("路径填写不正确"); } //当文件夹路径不存在的情况下,我们自己创建文件夹目录 if(!path.exists() ){ path.mkdirs(); } try { for(Picture pic:pics){ //写出数据,我们使用的是Poi类中,Picture自己所带的函数 pic.writeImageContent(new FileOutputStream(new File(path,pic.suggestFullFileName()))); /*byte [] picBytes = pic.getContent(); //获取字节流,也可以自己写入数据 copyByteToFile(picBytes);*/ } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }}
Doc的表格读取
//遍历range范围内的table。 TableIterator tableIter = new TableIterator(range);while (tableIter.hasNext()) { Table table = tableIter.next(); //开始位置 int start = table.getStartOffset(); //结束位置 int end = table.getEndOffset(); System.out.printf("开始位置%d,结束为止%d\r\n",start,end); //获取行的数目 int rowNum = table.numRows(); for (int j = 0; j < rowNum; j++) { //获取每一行 TableRow row = table.getRow(j); int cellNum = row.numCells(); for (int k = 0; k < cellNum; k++) { //获取每一列 TableCell cell = row.getCell(k); // 输出单元格的文本 System.out.println(cell.text().trim()); } }}
完整代码
package com.yellowcong.test;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.List;import java.util.UUID;import org.apache.poi.hwpf.HWPFDocument;import org.apache.poi.hwpf.usermodel.Picture;import org.apache.poi.hwpf.usermodel.Range;import org.apache.poi.hwpf.usermodel.Table;import org.apache.poi.hwpf.usermodel.TableCell;import org.apache.poi.hwpf.usermodel.TableIterator;import org.apache.poi.hwpf.usermodel.TableRow;import com.sun.xml.internal.messaging.saaj.util.ByteInputStream;public class DocText { public static void main(String[] args) throws Exception, IOException { String BASE_PATH = "D:\\笔记\\服务器学习\\bae\\"; File file = new File(BASE_PATH + "BAE 服务器文件目录问题.doc"); HWPFDocument doc = new HWPFDocument(new FileInputStream(file)); //通过 Doc对象直接获取Text StringBuilder sb = doc.getText(); //System.out.println(sb.toString()); //通过Range对象获取Text Range range = doc.getRange(); String text = range.text(); //System.out.println(text); //获取段落数目 //在Word中,一个回车符就是一个段落了 int nums = range.numParagraphs(); //System.out.println(nums); //获取doc中的图片数 List<Picture> pics = doc.getPicturesTable().getAllPictures(); for(Picture pic:pics){ //图片在doc文件中的位置,分析Doc 转化成其他文本时需要用到 int start = pic.getStartOffset(); int width = pic.getWidth(); int height = pic.getHeight(); String mimeType = pic.getMimeType(); System.out.printf("开始位置%d\t图片大小度%d,高%d,\t图片类型%s\r\n",start,width,height,mimeType); } //1.通过Picture的writeImageContent方法 写文件 //2.获取Picture的byte 自己写 copyPic2Disk(pics, new File(BASE_PATH)); //遍历range范围内的table。 TableIterator tableIter = new TableIterator(range); while (tableIter.hasNext()) { Table table = tableIter.next(); //开始位置 int start = table.getStartOffset(); //结束位置 int end = table.getEndOffset(); System.out.printf("开始位置%d,结束为止%d\r\n",start,end); //获取行的数目 int rowNum = table.numRows(); for (int j = 0; j < rowNum; j++) { //获取每一行 TableRow row = table.getRow(j); int cellNum = row.numCells(); for (int k = 0; k < cellNum; k++) { //获取每一列 TableCell cell = row.getCell(k); // 输出单元格的文本 System.out.println(cell.text().trim()); } } } } /** * 也可以自己写方法 * @param imgByte * @throws Exception */ public static void copyByteToFile(byte[] imgByte,String path) throws Exception { InputStream in = new ByteInputStream(imgByte, 0, imgByte.length); byte[] buff = new byte[1024]; String fileName = UUID.randomUUID().toString().substring(0, 6); OutputStream out = new FileOutputStream(new File(path + fileName + ".jpg")); int len = 0; while ((len = in.read(buff)) > 0) { out.write(buff, 0, len); } out.flush(); out.close(); in.close(); } /** * 通过Picture 自己类中的读写方法 * @param pics * @param path */ public static void copyPic2Disk(List<Picture> pics,File path){ if(pics == null || pics.size() <=0){ return; } if(!path.isDirectory()){ throw new RuntimeException("路径填写不正确"); } //当文件夹路径不存在的情况下,我们自己创建文件夹目录 if(!path.exists() ){ path.mkdirs(); } try { for(Picture pic:pics){ //写出数据,我们使用的是Poi类中,Picture自己所带的函数 pic.writeImageContent(new FileOutputStream(new File(path,pic.suggestFullFileName()))); /*byte [] picBytes = pic.getContent(); //获取字节流,也可以自己写入数据 copyByteToFile(picBytes);*/ } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
完整代码
package com.yellowcong.test;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.List;import java.util.UUID;import org.apache.poi.hwpf.HWPFDocument;import org.apache.poi.hwpf.usermodel.Picture;import org.apache.poi.hwpf.usermodel.PictureType;import org.apache.poi.hwpf.usermodel.Range;import org.apache.poi.hwpf.usermodel.Table;import org.apache.poi.hwpf.usermodel.TableCell;import org.apache.poi.hwpf.usermodel.TableIterator;import org.apache.poi.hwpf.usermodel.TableRow;import com.sun.xml.internal.messaging.saaj.util.ByteInputStream;public class DocText { public static void main(String[] args) throws Exception, IOException { String BASE_PATH = "D:\\笔记\\服务器学习\\bae\\"; File file = new File(BASE_PATH + "BAE 服务器文件目录问题.doc"); HWPFDocument doc = new HWPFDocument(new FileInputStream(file)); //通过 Doc对象直接获取Text StringBuilder sb = doc.getText(); //System.out.println(sb.toString()); //通过Range对象获取Text Range range = doc.getRange(); String text = range.text(); //System.out.println(text); //获取段落数目 //在Word中,一个回车符就是一个段落了 int nums = range.numParagraphs(); //System.out.println(nums); //获取doc中的图片数 List<Picture> pics = doc.getPicturesTable().getAllPictures(); for(Picture pic:pics){ //图片在doc文件中的位置,分析Doc 转化成其他文本时需要用到 //文件开始位置,结束位置没有 int start = pic.getStartOffset(); //图片的宽高 int width = pic.getWidth(); int height = pic.getHeight(); //文件名称 String name = pic.suggestFullFileName(); //文件后缀 String exts= pic.suggestFileExtension(); //文件类型 PictureType type = pic.suggestPictureType(); String mimeType = pic.getMimeType(); System.out.printf("开始位置%d\t图片大小度%d,高%d,\t图片类型%s\r\n",start,width,height,mimeType); } //1.通过Picture的writeImageContent方法 写文件 //2.获取Picture的byte 自己写 copyPic2Disk(pics, new File(BASE_PATH)); //遍历range范围内的table。 TableIterator tableIter = new TableIterator(range); while (tableIter.hasNext()) { Table table = tableIter.next(); //开始位置 int start = table.getStartOffset(); //结束位置 int end = table.getEndOffset(); System.out.printf("开始位置%d,结束为止%d\r\n",start,end); //获取行的数目 int rowNum = table.numRows(); for (int j = 0; j < rowNum; j++) { //获取每一行 TableRow row = table.getRow(j); int cellNum = row.numCells(); for (int k = 0; k < cellNum; k++) { //获取每一列 TableCell cell = row.getCell(k); // 输出单元格的文本 System.out.println(cell.text().trim()); } } } } /** * 也可以自己写方法 * @param imgByte * @throws Exception */ public static void copyByteToFile(byte[] imgByte,String path) throws Exception { InputStream in = new ByteInputStream(imgByte, 0, imgByte.length); byte[] buff = new byte[1024]; String fileName = UUID.randomUUID().toString().substring(0, 6); OutputStream out = new FileOutputStream(new File(path + fileName + ".jpg")); int len = 0; while ((len = in.read(buff)) > 0) { out.write(buff, 0, len); } out.flush(); out.close(); in.close(); } /** * 通过Picture 自己类中的读写方法 * @param pics * @param path */ public static void copyPic2Disk(List<Picture> pics,File path){ if(pics == null || pics.size() <=0){ return; } if(!path.isDirectory()){ throw new RuntimeException("路径填写不正确"); } //当文件夹路径不存在的情况下,我们自己创建文件夹目录 if(!path.exists() ){ path.mkdirs(); } try { for(Picture pic:pics){ //写出数据,我们使用的是Poi类中,Picture自己所带的函数 pic.writeImageContent(new FileOutputStream(new File(path,pic.suggestFullFileName()))); /*byte [] picBytes = pic.getContent(); //获取字节流,也可以自己写入数据 copyByteToFile(picBytes);*/ } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
阅读全文
0 0
- POI之Word文档读取-yellowcong
- poi读取word文档
- POI之Word转化为Html-yellowcong
- POI之Word转化为Markdown-yellowcong
- POI之根据模板导出word-yellowcong
- POI之自定义注解生成文档-yellowcong
- Java用poi读取Word文档
- java poi读取word、excel文档
- POI 创建,读取excel。处理word文档
- poi读取word文档中内容
- 使用POI读取word文档内容
- Java使用poi读取word文档
- 使用POI读取word文档内容
- java poi组件 读取word文档 替换文档 内容 图片
- POI之读写Excel-yellowcong
- POI导出word 文档之 WordHelper
- springboot + poi word文档导出,Excel文件读取
- 关于poi读取word文档修改后输出乱码问题 poi word 乱码
- Gym-101353H Simple Path(树型dp)
- 朴素贝叶斯分类的Python实现
- java--单测
- linux下如何查看某软件是否已安装
- SGU167 I-country
- POI之Word文档读取-yellowcong
- HDU-5977 Garden of Eden(树分治+枚举子集)
- JS中style.display和style.visibility的区别
- 关于const引用
- Mac Install Raspberry system to machine
- linux ftp 550 Permission denied. ftp Passive mode refused.
- 刷机步骤
- CodeForces830C-Round#424 Div1 C Solution:分块导学&膜QC霸霸
- Spring Boot 系列(三)属性配置&自定义属性配置