.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文件时获取图片与段落的对应关系相关推荐

  1. java读取docx_java使用poi读取doc和docx文件

    maven构建的项目-->pom.xml文件 eclipse提供Dependencies直接添加依赖jar包的工具:直接搜索poi以及poi-ooxml即可,maven会自动依赖需要的jar包: ...

  2. java 读取 doc_java使用poi读取doc和docx文件的实现示例

    这几天在学习java io流的东西,有一个网友看到博客后问了一个问题,就是说他的doc文档为什么用我所说的方法死活就是乱码. 我一开始以为是他方法问题,结果自己试了之后发现和他的结果一样也是乱码. 于 ...

  3. java 读取doc文件_如何在java中读取Doc或Docx文件?

    我想在 java中读一个word文件 import org.apache.poi.poifs.filesystem.*; import org.apache.poi.hpsf.DocumentSumm ...

  4. POI读取doc、docx文件

    1.明确几个概念: Range:它表示一个范围,这个范围可以是整个文档,也可以是里面的某一小节(Section),也可以是某一个段落(Paragraph),还可以是拥有共同属性的一段文本(Charac ...

  5. java使用poi读取doc和docx文件

    这几天在学习java io流的东西,有一个网友看到博客后问了一个问题,就是说他的doc文档为什么用我所说的方法死活就是乱码. 我一开始以为是他方法问题,结果自己试了之后发现和他的结果一样也是乱码. 于 ...

  6. 【Python】python读取doc、docx文件里的表格内容并存入excel中

    效果 先展示下基本的效果,首先我们只有一个doc文件,与python的代码: 我这里用的是doc的word文档,文档内表格如下: 通过python读取后打印: 我这里没有专门按照表格内往excel中写 ...

  7. php下载docx打不开,使用PHPWord下载DOCX文件时获取损坏的文件 - php

    我正在尝试使用" PHPWord"下载docx文件. 如果我尝试将文件保存到服务器上,则可以正常工作.但是,如果添加标题以下载文件,则文件将以损坏的形式显示. 注意:我正在使用op ...

  8. Microsoft Word中,编辑doc、docx文件时,前一页页码和后一页页码是一样的,如何解决?

    解决办法: Step1: 首先,点击后一页的页码位置: Step2: 选择链接到前一条页眉,如下图所示 Step3: 关闭页眉和页脚

  9. 读取DOC、DOCX、 XLS 、XLSX 、PDF 、PPTX 、TXT文档内容

    读取DOC.DOCX. XLS .XLSX .PDF .PPTX .TXT文档内容 POM 依赖 <!-- https://mvnrepository.com/artifact/org.apac ...

最新文章

  1. 华为鸿蒙运行视频,某游戏在华为鸿蒙运行,被识别成使用安卓模拟器
  2. FastDFS图片服务器
  3. PHP中empty,is_null,isset的区别
  4. LinCode落单的数
  5. BugkuCTF-MISC题闪的好快
  6. boot lvm 分区_Linux如何在线对逻辑分区扩容
  7. $0,$#,$@,$+特殊符号的含义,shell的传递参数
  8. Android 系统性能优化(22)---dumpsys的使用
  9. CLRS10.1-6练习 - 用双栈实现队列
  10. Web前端开发技术 HTML、CSS、JavaScript pdf
  11. 【建模算法】蒙特卡罗模拟法(Python实现)
  12. 计算机技能比赛试题,计算机技能竞赛比赛试题文字录入WORDEXCEL
  13. 网页设计收藏站 80 个
  14. 2019.05 随笔
  15. Ubuntu系统中如何删除一个用户
  16. 小福利,用Excel VBA编程制作一个变色小游戏
  17. 深入理解MyBatis(七)—MyBatis事务
  18. 二维数组的传参调用写法
  19. STM32 内存分布探究
  20. Git安装包(win版)

热门文章

  1. Spring Boot学习总结(20)——提升开发效率之热部署
  2. Java基础学习总结(90)——Java单元测试技巧
  3. java线程轮询_基于springboot实现轮询线程自动执行任务
  4. 李晓枫:金融信息化发展和创新的三方面
  5. Android下基于线程池的网络访问基础框架
  6. 深挖android low memory killer
  7. 图形数据库、NOSQL和Neo4j
  8. Android之复选框对话框
  9. 弱鸡儿长乐爆零旅Day5
  10. 持有对象---Arrays.asList()和Collections.addAll()的性能比较