JAVA读取word内表格的图片,将几行几列写入图片名(非POI)

java 复制代码
package org.springblade;


import com.spire.doc.Document;
import com.spire.doc.Section;
import com.spire.doc.TableCell;
import com.spire.doc.TableRow;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.fields.DocPicture;
import com.spire.doc.interfaces.ITable;

import javax.imageio.ImageIO;
import java.awt.image.RenderedImage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class GetTable {
	public static void main(String[] args)throws IOException {
		//加载Word测试文档
		Document doc = new Document();
		doc.loadFromFile("E:\\测试导入\\导入模板.docx");

		//获取第一节
		Section section = doc.getSections().get(0);

		//获取第一个表格
		ITable table = section.getTables().get(0);

		//创建txt文件(用于写入表格中提取的文本)
		String output = "ReadTextFromTable.txt";
		File textfile = new File(output);
		if (textfile.exists())
		{
			textfile.delete();
		}
		textfile.createNewFile();
		FileWriter fw = new FileWriter(textfile, true);
		BufferedWriter bw = new BufferedWriter(fw);

		//创建List
		List images = new ArrayList();
		HashMap<String, Object> photoMap = new HashMap<>();

		//遍历表格中的行
		for (int i = 0; i < table.getRows().getCount(); i++)
		{
			TableRow row = table.getRows().get(i);
			//遍历每行中的单元格
			for (int j = 0; j < row.getCells().getCount(); j++)
			{
				TableCell cell = row.getCells().get(j);
				//遍历单元格中的段落
				for (int k = 0; k < cell.getParagraphs().getCount(); k++)
				{
					Paragraph paragraph = cell.getParagraphs().get(k);
					bw.write(paragraph.getText() + "\t");//获取文本内容

					//遍历段落中的所有子对象
					for (int x = 0; x < paragraph.getChildObjects().getCount(); x++)
					{
						Object object = paragraph.getChildObjects().get(x);
						//判定对象是否为图片
						if (object instanceof DocPicture)
						{
							//获取图片
							DocPicture picture = (DocPicture) object;
							images.add(picture.getImage());
							//得到当前表格的行和列
							String photoName = String.format("第%s行第%s列的图片.png", i + 1, j);
							photoMap.put(photoName,picture.getImage());

						}
					}
				}
			}
			bw.write("\r\n");//写入内容到txt文件
		}
		bw.flush();
		bw.close();
		fw.close();

		//将图片以PNG文件格式保存
//		for (int z = 0; z < images.size(); z++)
//		{
//			File imagefile = new File(String.format("提取的表格图片-%d.png", z));
//			ImageIO.write((RenderedImage) images.get(z), "PNG", imagefile);
//		}

		for (String s : photoMap.keySet()) {
			File imageFile = new File(s);
			ImageIO.write((RenderedImage) photoMap.get(s), "PNG", imageFile);

		}

	}
}

在此之前必须引入maven

XML 复制代码
      <dependency>
            <groupId>e-iceblue</groupId>
            <artifactId>spire.doc.free</artifactId>
            <version>5.2.0</version>
        </dependency>
    <repositories>
        <repository>
            <id>com.e-iceblue</id>
            <name>e-iceblue</name>
            <url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
        </repository>
相关推荐
加载力科技8 分钟前
硬盘咔咔响是坏盘信号!赶在数据丢失前克隆换盘:不重装系统、不丢文件
windows·嵌入式硬件·系统安全·策略模式·命令模式·硬盘
m0_5873830017 分钟前
深圳24小时自助健身房解决方案实战:从系统架构到部署指南
java·人工智能·spring boot·spring·系统架构·需求分析
郑州光合科技余经理33 分钟前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程
无序的浪1 小时前
测试博客-基于微服务的在线判题系统
java·spring cloud·docker·微服务·测试·在线判题
xfan_me2 小时前
维修保养记录精准版 API 对接实战指南
java·大数据·python
Keven-zhou2 小时前
不用先学前端框架,Java后端也能独立交付项目?飞算JavaAI实测
java
海上小飞龙2 小时前
改一个数,右边全得重算,这题怎么扛住两万次查询
java·c++·python
Leo.yuan2 小时前
从“看全局“到“评成效“:央国企穿透式监管六步链路,哪些厂商能真正闭环
java·大数据·人工智能
小马哥程序开发2 小时前
[点赞收藏免费领取 · 项目源码]57105基于Spring Boot的充电桩管理系统的设计与实现
java·spring boot·源码·课程设计·毕设·大作业·课设
2601_962364972 小时前
电脑人脸解锁的安全基石,聊聊 Windows Hello 硬件规范
windows·安全·电脑