word to html,word转html并保存图片到本地

依赖坐标,版本必须一致

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>4.1.2</version>
        </dependency>

转换代码,仅支持docx格式文档

public static String docxToHtmlImgByte(String file) {
        // html临时存放路径
        String htmlPath = "/upload/" + DateUtils.dateTimeNow() + ".html";
        FileOutputStream html = null;
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(file);
            XWPFDocument docxDocument = new XWPFDocument(fileInputStream);
            html = new FileOutputStream(htmlPath);
            XHTMLOptions options = XHTMLOptions.create();
            options.setOmitHeaderFooterPages(true);
            options.setFragment(true);
            // 处理word文档内的图片
            options.setImageManager(new CustomImageManager());
            options.setIgnoreStylesIfUnused(true);
            // 转换
            XHTMLConverter.getInstance().convert(docxDocument, html, options);
            // 用了hutool操作文件
            return FileUtil.readString(new File(htmlPath), CharsetUtil.CHARSET_UTF_8);
        } catch (Exception e) {
            log.error("Word转Html过程出现异常!", e);
        }finally {
            if (html != null) {
                try {
                    html.close();
                    FileUtil.del(htmlPath);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

处理图片类

import cn.hutool.core.io.IoUtil;
import fr.opensagres.poi.xwpf.converter.core.ImageManager;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

/**
 * @author Mr.wuliang
 * @version 1.0
 * @data 2024/1/23 16:01
 */
public class CustomImageManager extends ImageManager {
    private byte[] picture;
    private String suffix;

    public CustomImageManager() {
        super(new File(""), "");
    }
    
    @Override
    public void extract(String imagePath, byte[] imageData){
        this.suffix = "." + imagePath.split("\\.")[1];
        this.picture = imageData;
    }

    @Override
    public String resolve(String uri) {
        String path = "/upload/" + DateUtils.dateTime() + "/" + DateUtils.dateTimeNow() + suffix;
        try {
            IoUtil.write(new FileOutputStream(path), true, picture);
            // 上传阿里云OSS,没有就注释掉
            AliyunOSSUtils.uploadFileBytes(path, picture);
            return path;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return "";
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值