前言:在很多时候我们都需要到项目中导入word文档,但是后期再次在前段显示这个文档的时候前端往往需要的是html格式的,所以这个时候就会提出一个需求: 你们存文档的时候能不能存成html格式的?  于是这篇文章的内容就可以满足这个需求

我是通过MultiPartFile 类来实现的,上代码:

一、首先导入需要的依赖包:

org.apache.poi

poi-scratchpad

3.17

org.apache.poi

poi-ooxml

3.17

fr.opensagres.xdocreport

fr.opensagres.xdocreport.converter.docx.xwpf

2.0.1

二、编写代码:

package com.lmt.service.file;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.util.UUID;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import javax.xml.transform.OutputKeys;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

import org.apache.poi.hwpf.HWPFDocument;

import org.apache.poi.hwpf.converter.PicturesManager;

import org.apache.poi.hwpf.converter.WordToHtmlConverter;

import org.apache.poi.hwpf.usermodel.PictureType;

import org.apache.poi.util.IOUtils;

import org.apache.poi.xwpf.usermodel.XWPFDocument;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

import org.springframework.web.multipart.MultipartFile;

import org.w3c.dom.Document;

import fr.opensagres.poi.xwpf.converter.core.ImageManager;

import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLConverter;

import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLOptions;

@Component

public class WordToHtml {

private static final Logger logger = LoggerFactory.getLogger(WordToHtml.class);

//转换的方法

public File convert(MultipartFile file) {

//获得文件的名字

String filename = file.getOriginalFilename();

//获得文件的扩展名

String suffix=filename.substring(filename.lastIndexOf("."));

String newName=UUID.randomUUID().toString();

// TODO 需要保存在一个新的位置

//将文件保存在D:/test/文件下

File convFile = new File("D:/test/" + newName +suffix);

FileOutputStream fos = null;

try {

//创建文件

convFile.createNewFile();

fos = new FileOutputStream(convFile);

fos.write(file.getBytes());

} catch (IOException ex) {

logger.error("上传文件出错!", ex);

return null;

} finally {

IOUtils.closeQuietly(fos);

}

// 输入文件名的所在文件夹

// 加上反斜杠

String parentDirectory = convFile.getParent();

if (!parentDirectory.endsWith("\\")) {

parentDirectory = parentDirectory + "\\";

}

if (filename.endsWith(".docx")) {

return docxConvert(parentDirectory, convFile.getAbsolutePath(),newName);

} else if (filename.endsWith(".doc")) {

return docConvert(parentDirectory, convFile.getAbsolutePath(),newName);

} else {

logger.error("不支持的文件格式!");

return null;

}

}

private File docxConvert(String parentDirectory, String filename,String newName) {

try {

XWPFDocument document = new XWPFDocument(new FileInputStream(filename));

XHTMLOptions options = XHTMLOptions.create().setImageManager(new ImageManager(new File(parentDirectory), UUID.randomUUID().toString())).indent(4);

FileOutputStream out = new FileOutputStream(new File(parentDirectory + newName+ ".html"));

XHTMLConverter.getInstance().convert(document, out, options);

return new File(parentDirectory + newName+ ".html");

} catch (IOException ex) {

logger.error("word转化出错!", ex);

return null;

}

}

private File docConvert(String parentDirectory, String filename,String newName) {

try {

HWPFDocument document = new HWPFDocument(new FileInputStream(filename));

WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(

DocumentBuilderFactory.newInstance().newDocumentBuilder()

.newDocument());

// converter默认对图片不作处理,需要手动下载图片并嵌入到html中

wordToHtmlConverter.setPicturesManager(new PicturesManager() {

@Override

public String savePicture(byte[] bytes, PictureType pictureType, String s, float v, float v1) {

String imageFilename = parentDirectory + "";

String identity=UUID.randomUUID().toString();

File imageFile = new File(imageFilename, identity+s);

imageFile.getParentFile().mkdirs();

InputStream in = null;

FileOutputStream out = null;

try {

in = new ByteArrayInputStream(bytes);

out = new FileOutputStream(imageFile);

IOUtils.copy(in, out);

} catch (IOException ex) {

logger.error("word转化出错!", ex);

} finally {

if (in != null) {

IOUtils.closeQuietly(in);

}

if (out != null) {

IOUtils.closeQuietly(out);

}

}

return imageFile.getName();

}

});

wordToHtmlConverter.processDocument(document);

Document htmlDocument = wordToHtmlConverter.getDocument();

ByteArrayOutputStream out = new ByteArrayOutputStream();

DOMSource domSource = new DOMSource(htmlDocument);

StreamResult streamResult = new StreamResult(out);

TransformerFactory tf = TransformerFactory.newInstance();

Transformer serializer = tf.newTransformer();

serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");

serializer.setOutputProperty(OutputKeys.INDENT, "yes");

serializer.setOutputProperty(OutputKeys.METHOD, "html");

serializer.transform(domSource, streamResult);

out.close();

String result = new String(out.toByteArray());

FileWriter writer = new FileWriter(parentDirectory + newName + ".html");

writer.write(result);

writer.close();

} catch (IOException | TransformerException | ParserConfigurationException ex) {

logger.error("word转化出错!", ex);

}

return new File(parentDirectory + newName + ".html");

}

/**

* 将上传的Word文档转化成HTML字符串

* @param attachfile

* @return

*/

public String convertToHtml(MultipartFile attachfile) {

String wordContent = "";

// 将Word文件转换为html

File file = convert(attachfile);

// 读取html文件

if (file != null) {

return "文件转换成功"

}

return "文件转换失败";

}

代码的含义已经在代码行的注释上有了,哪里有问题,欢迎大家随时在评论下方留言!

word 转 html cms,Java 将Word文件转换为HTML格式文件相关推荐

  1. msg文件转成html文件,如何将MSG格式的文件转换为PDF格式文件?

    三.如何将MSG格式的文件转换为PDF格式的文件? 想要随时查看MSG格式文件的话,格式转换就成为了理想的途径,下面将教大家将MSG格式的文件转换为PDF格式文件三种方式,一起去学习一下吧. 1.借助 ...

  2. 如何将csv格式文件转换为Json格式文件?

    如何使用python将csv格式文件转换为Json格式文件? 文章目录 如何使用python将csv格式文件转换为Json格式文件? 前言 一.使用execl方式打开csv文档 二.python转换代 ...

  3. ncm格式文件转换为mp3格式文件

    我们经常会遇到ncm格式的文件,然而,有了一款小工具,我们可以轻松将ncm格式转换为常见的mp3格式,以便更方便地播放和共享音乐.本文将介绍这个小工具的实现方式,让我们一起来看看吧! 首先,让我们来看 ...

  4. 【方法指南】将以逗号为分隔值的文件转换为excel格式文件

    将以逗号为分隔值的文件转换为excel格式文件 1 项目场景 2 解决方案 1 项目场景 以逗号为分隔值的.txt文件转换为excel格式文件. 2 解决方案 以逗号为分隔值的文件转换为excel格式 ...

  5. C#实现csv文件or xls文件转换为txt格式文件的源码

    在做C#对接PLC数据写入.采集时,项目有一个环节需要把 csv或xls格式的文件转换为txt格式的文件. 以下是核心源码,未做包装. 聪明的你可以把它写成winform, 但请不要以此为任何商业目的 ...

  6. linux ubuntu下怎样将pdf格式文件转换为doc格式文件,如何在Ubuntu命令行上将文档转换为PDF格式...

    在打印,共享和通过电子邮件发送文档(尤其是较大的文档)时,PDF或可移植文档格式通常是首选.对于Windows和macOS,您可能非常熟悉,也依赖于广泛使用的Acrobat产品进行pdf创建,查看和编 ...

  7. uiautomator日志文件转换为xml格式文件

    如果想把uiautomator的日志文件,转换成漂亮的xml文件,那么可以使用automator-log-converter.jar工具, 工具使用方法: 使用工具automator-log-conv ...

  8. linux ubuntu下怎样将pdf格式文件转换为doc格式文件,Ubuntu环境下把word文档转成pdf,把pdf文件转成jpg...

    环境搭建 使用语言 python3 安装imagemagick(pdf转jpg是内部需要调用到此工具) apt-get install imagemagick 安装libreoffice(此工具用于将 ...

  9. 手机上怎么打开md格式的文件_一键就能将PDF转换为各种格式文件,无奈知道的人实在太少了...

    在我们的工作中,不少人都喜欢使用PDF文件进行传输,既稳定也方便.但是大家都知道,转换成PDF文件后我们就不可以对文件内容进行修改了,如果我们需要再次进行修改的话,这就有点难弄了. 别担心,今天小编将 ...

最新文章

  1. CEGUI中文处理(补)
  2. 宝马戴姆勒、大众福特 自动驾驶圈又添新团伙
  3. 浅析文件传输协议 (ftp) 的工作原理
  4. 呦乐乐_百科讲解大全
  5. 破解校园网锐捷无法开热点问题
  6. 【C#网络编程系列】专题十:实现简单的邮件收发器
  7. 宠物领养平台的分析与实现
  8. 模拟电子技术基础-第一章-常用半导体器件
  9. 关于USB设备芯片型号检测工具
  10. OptiFDTD应用:纳米盘型谐振腔等离子体波导滤波器
  11. ceph rbd mysql_ceph-rbd使用
  12. day 05 random time sys os pickle json re模块 爬取dytt
  13. 华为鸿蒙 OS 尝鲜,跑了个 “hello world”!跑通后,我特么开始怀疑人生...
  14. 新建一个html代码页面,三分钟教你创建一个简单的网页
  15. HDU 6058 Kanade's sum 逆序求第k大
  16. 电脑烤机了会有损伤吗,AIDA64一般烤多久
  17. 使用Audacity软件对清浊音进行时频分析并描述其特点
  18. 迈阿密大学的计算机系咋样,迈阿密大学牛津分校计算机专业如何?过来人告诉你...
  19. java word 水印_如何通过Java添加水印到Word文档
  20. threejs视频教程学习(4):贴图、材质、光线

热门文章

  1. CentOS7安装Hadoop2.7完整流程
  2. Java 解决采集UTF-8网页空格变成问号乱码
  3. idea lombok 插件安装
  4. [转载] java左移右移和无符号右移
  5. c++ cdi+示例_C ++“或”关键字示例
  6. dbms系统 rdbms_DBMS与传统文件系统之间的区别
  7. java的equals方法_Java LocalDateTime类| 带示例的equals()方法
  8. kadane算法_使用KADANE的算法求最大子阵列和
  9. tsql是mysql中的吗_Mysql中的sql是如何执行的
  10. c#如何实现叫号操作_微信预约排队叫号系统操作指南