poi获取段落位置_java poi读取.doc和.docx文件时获取图片与段落的对应关系
.doc文件
代码中的WordParagraph类是自己创建的实体类,用于记录文本信息和图片
file_word对象为前台上传的MultipartFile对象.
// doc格式
List wordParagraphs=new ArrayList<>();
HWPFDocument doc = new HWPFDocument(file_word.getInputStream());
Range range = doc.getRange();
int numP = range.numParagraphs();
//StringBuffer ret = new StringBuffer();
for (int i = 0; i < numP; ++i) {
//从每一段落中获取文字
Paragraph p = range.getParagraph(i);
//ret.append(p.text());
WordParagraph wordParagraph=new WordParagraph(p.text(),i);
wordParagraph.init();
wordParagraphs.add(wordParagraph);
}
// List pictsList = new ArrayList();
// 得到文档的数据流
byte[] dataStream = doc.getDataStream();
int numChar = range.numCharacterRuns();
Integer paragraphOrder=0;
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);
String[] temp_array=(cRun.toString()+" ").split("\r");
paragraphOrder=paragraphOrder+temp_array.length-1;
if (has) {
Picture picture = pTable.extractPicture(cRun, true);
if(paragraphOrder
wordParagraphs.get(paragraphOrder).addPictures(picture);
}
}
}
当前处理方式存在一些局限性
无法确定图片在段落的具体位置信息.(该问题可通过对文档流处理的优化解决)
如果一个段落有多个图片,可能只解析一个
.docx
网上对标签解析的方式,实测不可行.poi实际有提供获取的方法.
同样的,无法获取图片在段落的具体位置
.doc和.docx读取的图片类不是同一个,兼容的时候需要注意.
// docx格式
XWPFDocument document=new XWPFDocument(file_word.getInputStream());
List XWPFParagraphList=document.getParagraphs();
//List picList = document.getAllPictures();
for (int i = 0; i < XWPFParagraphList.size(); ++i) {
//从每一段落中获取文字
XWPFParagraph p = XWPFParagraphList.get(i);
WordParagraph wordParagraph=new WordParagraph(p.getParagraphText(),i);
List pictureList=readImageInfoInParagraph(p);
wordParagraph.setPictures(pictureList);
wordParagraph.init();
wordParagraphs.add(wordParagraph);
}
//获取某一个段落中的所有图片
public static List readImageInfoInParagraph(XWPFParagraph paragraph) {
List res=new ArrayList<>();
//段落中所有XWPFRun
List runList = paragraph.getRuns();
for (XWPFRun run : runList) {
List pictures=run.getEmbeddedPictures();
for(int i=0;i
res.add(pictures.get(i).getPictureData());
}
}
return res;
}
poi获取段落位置_java poi读取.doc和.docx文件时获取图片与段落的对应关系相关推荐
- java读取docx_java使用poi读取doc和docx文件
maven构建的项目-->pom.xml文件 eclipse提供Dependencies直接添加依赖jar包的工具:直接搜索poi以及poi-ooxml即可,maven会自动依赖需要的jar包: ...
- java 读取 doc_java使用poi读取doc和docx文件的实现示例
这几天在学习java io流的东西,有一个网友看到博客后问了一个问题,就是说他的doc文档为什么用我所说的方法死活就是乱码. 我一开始以为是他方法问题,结果自己试了之后发现和他的结果一样也是乱码. 于 ...
- java 读取doc文件_如何在java中读取Doc或Docx文件?
我想在 java中读一个word文件 import org.apache.poi.poifs.filesystem.*; import org.apache.poi.hpsf.DocumentSumm ...
- POI读取doc、docx文件
1.明确几个概念: Range:它表示一个范围,这个范围可以是整个文档,也可以是里面的某一小节(Section),也可以是某一个段落(Paragraph),还可以是拥有共同属性的一段文本(Charac ...
- java使用poi读取doc和docx文件
这几天在学习java io流的东西,有一个网友看到博客后问了一个问题,就是说他的doc文档为什么用我所说的方法死活就是乱码. 我一开始以为是他方法问题,结果自己试了之后发现和他的结果一样也是乱码. 于 ...
- 【Python】python读取doc、docx文件里的表格内容并存入excel中
效果 先展示下基本的效果,首先我们只有一个doc文件,与python的代码: 我这里用的是doc的word文档,文档内表格如下: 通过python读取后打印: 我这里没有专门按照表格内往excel中写 ...
- php下载docx打不开,使用PHPWord下载DOCX文件时获取损坏的文件 - php
我正在尝试使用" PHPWord"下载docx文件. 如果我尝试将文件保存到服务器上,则可以正常工作.但是,如果添加标题以下载文件,则文件将以损坏的形式显示. 注意:我正在使用op ...
- Microsoft Word中,编辑doc、docx文件时,前一页页码和后一页页码是一样的,如何解决?
解决办法: Step1: 首先,点击后一页的页码位置: Step2: 选择链接到前一条页眉,如下图所示 Step3: 关闭页眉和页脚
- 读取DOC、DOCX、 XLS 、XLSX 、PDF 、PPTX 、TXT文档内容
读取DOC.DOCX. XLS .XLSX .PDF .PPTX .TXT文档内容 POM 依赖 <!-- https://mvnrepository.com/artifact/org.apac ...
最新文章
- 华为鸿蒙运行视频,某游戏在华为鸿蒙运行,被识别成使用安卓模拟器
- FastDFS图片服务器
- PHP中empty,is_null,isset的区别
- LinCode落单的数
- BugkuCTF-MISC题闪的好快
- boot lvm 分区_Linux如何在线对逻辑分区扩容
- $0,$#,$@,$+特殊符号的含义,shell的传递参数
- Android 系统性能优化(22)---dumpsys的使用
- CLRS10.1-6练习 - 用双栈实现队列
- Web前端开发技术 HTML、CSS、JavaScript pdf
- 【建模算法】蒙特卡罗模拟法(Python实现)
- 计算机技能比赛试题,计算机技能竞赛比赛试题文字录入WORDEXCEL
- 网页设计收藏站 80 个
- 2019.05 随笔
- Ubuntu系统中如何删除一个用户
- 小福利,用Excel VBA编程制作一个变色小游戏
- 深入理解MyBatis(七)—MyBatis事务
- 二维数组的传参调用写法
- STM32 内存分布探究
- Git安装包(win版)
热门文章
- Spring Boot学习总结(20)——提升开发效率之热部署
- Java基础学习总结(90)——Java单元测试技巧
- java线程轮询_基于springboot实现轮询线程自动执行任务
- 李晓枫:金融信息化发展和创新的三方面
- Android下基于线程池的网络访问基础框架
- 深挖android low memory killer
- 图形数据库、NOSQL和Neo4j
- Android之复选框对话框
- 弱鸡儿长乐爆零旅Day5
- 持有对象---Arrays.asList()和Collections.addAll()的性能比较