java POI读取docx中图片位置

一 序

   之前用POI读取Word内容,但是图片位置没有(能获得文档中的所有图片,但是你并不能知道这些图片是在哪里)。

看了大佬写的文章,才动手试一下:

pom.xml:

这个要注意,很多留言咨询问的主要是版本的问题。

 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>ooxml-schemas</artifactId>
            <version>1.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-scratchpad -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>3.17</version>
        </dependency>

util 代码:https://www.cnblogs.com/ct-csu/p/8178932.html 

import org.apache.commons.collections.CollectionUtils;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;


import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import java.util.List;



public class XWPFUtilsTest {


    public static void main(String[] args)  throws IOException {
        InputStream in = new FileInputStream("/Users/benmu/Documents/17.医学心理学 第7版(1).docx");
        XWPFDocument xwpfDocument = new XWPFDocument(in);
        List<XWPFParagraph> paragraphList = xwpfDocument.getParagraphs();
        System.out.println("图片的索引\t|图片名称\t|图片下一段文字的内容\t");
        System.out.println("------------------------------------------");
        for(int i = 0;i < paragraphList.size();i++){
            List<String> imageBundleList = XWPFUtils.readImageInParagraph(paragraphList.get(i));
            if(CollectionUtils.isNotEmpty(imageBundleList)){
                for(String pictureId:imageBundleList){
                    XWPFPictureData pictureData = xwpfDocument.getPictureDataByID(pictureId);
                    String imageName = pictureData.getFileName();
                    String lastParagraphText = paragraphList.get(i+1).getParagraphText();
                    System.out.println(pictureId +"\t|" + imageName + "\t|" + lastParagraphText);
                }
            }
        }
    }

}

效果:

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
POI(Poor Obfuscation Implementation)是一个Apache基金会下的开源项目,用于操作Microsoft Office文件格式(包括.doc、.docx、.xls、.xlsx等)。在使用POI操作Word文件时,可以通过XWPFDocument类和XWPFParagraph类来获取Word文档的文本内容。但是,如果要获取Word文档插入的图片的文本内容,需要利用POI提供的XWPFDocument类的getAllPictures()方法来获取Word文档所有图片,然后再通过图片位置信息(比如paragraph和run的位置)来获取图片插入的文本内容。具体的代码实现可以参考下面的示例代码: ```java import org.apache.poi.xwpf.usermodel.*; import java.io.FileInputStream; import java.io.IOException; import java.util.List; public class ReadWord { public static void main(String[] args) throws IOException { // 读取Word文档 XWPFDocument doc = new XWPFDocument(new FileInputStream("test.docx")); // 获取Word文档所有的图片 List<XWPFPicture> pictures = doc.getAllPictures(); // 遍历所有图片 for (XWPFPicture picture : pictures) { // 获取图片所在的段落 XWPFParagraph paragraph = picture.getParagraph(); // 获取图片所在的文本段 XWPFRun run = picture.getCTPicture().getPictArray(0).newCursor().getObject().getSpArray(0).getTxBody().getPArray(0).getRArray(0); // 获取图片插入的文本内容 String text = run.getText(0); System.out.println(text); } } } ``` 需要注意的是,上述代码只适用于获取Word文档插入的图片的文本内容,如果图片是作为文本的背景或者其他特殊情况,则无法获取图片的文本内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值