近日碰到该需求,遇坑记录于此,望能帮助到其他伙伴。
word转HTML时图片的处理我分为两种解决方案:1、图片保存在本地文件夹。2、转为base64。
以下分doc与docx,不同格式处理方法略有不同。
前端我用的是vue,直接通过“v-html”显示html文本
一、图片保存本地
坑1
大多数浏览器都不能以形如(file:///C://xxx)的形式直接访问本地文件,故需要在后台配置文件中配置虚拟路径映射到本地盘符。
@Configuration
public class ResourcesConfig implements WebMvcConfigurer
{
@Autowired
private RepeatSubmitInterceptor repeatSubmitInterceptor;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry)
{
/** 本地文件上传路径 */
//访问时:http://localhost:8080/Constants.RESOURCE_PREFIX/xxx
//RuoYiConfig.getProfile()保存的本地文件夹路径
registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + RuoYiConfig.getProfile() + "/");
}
1、doc
// 实例化WordToHtmlConverter,为图片等资源文件做准备
WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
wordToHtmlConverter.setPicturesManager(new PicturesManager() {
public String savePicture(byte[] content, PictureType pictureType, String suggestedName,
float widthInches, float heightInches) {
return suggestedName;
}
});
// doc
HWPFDocument wordDocument = new HWPFDocument(entity.getContent());
wordToHtmlConverter.processDocument(wordDocument);
// 处理图片,会在同目录下生成并保存图片
List<Picture> pics = wordDocument.getPicturesTable().getAllPictures();
if (pics != null) {
for (int i = 0; i < pics.size(); i++) {
Picture pic = (Picture) pics.get(i);
try {
String a = RuoYiConfig.getProfile()+ "/" + pic.suggestFullFileName();
pic.wr