刘俊凯 发表于 2024-9-5 03:36:13

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

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
      <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>

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: JAVA读取word内表格的图片,将几行几列写入图片名(非POI)