依赖坐标,版本必须一致
<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 "";
}
}