使用Java 将word文档转成html内容,输出到富文本

上传word文档 解析到富文本

将word解析成html工具类

import com.common.utils.DateUtil;
import com.common.utils.RandomUtil;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.io.FileUtils;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.PictureType;
import org.apache.poi.xwpf.converter.core.BasicURIResolver;
import org.apache.poi.xwpf.converter.core.FileImageExtractor;
import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;
import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.w3c.dom.Document;import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;/*** @date * @description*/
public class WordToHtmlUtil {private static final Logger logger = LoggerFactory.getLogger(WordToHtmlUtil.class);/*** 上传Word文档,返回解析后的Html*/public static String docToHtmlText(MultipartFile file) throws Exception {//使用字符数组流获取解析的内容ByteArrayOutputStream baos = new ByteArrayOutputStream();OutputStream outStream = new BufferedOutputStream(baos);try {//将上传的文件传入Document转换HWPFDocument wordDocument = new HWPFDocument(file.getInputStream());Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(document);//将读取到的图片上传并添加链接地址wordToHtmlConverter.setPicturesManager((imageStream, pictureType, name, width, height) -> {try {//首先要判断图片是否能识别if (pictureType.equals(PictureType.UNKNOWN)) {return "[不能识别的图片]";}//此处上传到自己的文件服务器 todoString qiNiuName = "";//文件名boolean upload = FileUtil.upload(new        FileInputStream(fileImage), qiNiuName);   return "上传后的图片地址";} catch (Exception e) {logger.info("upload exception", e);}return "[图片上传失败]";});// word文档转Html文档wordToHtmlConverter.processDocument(wordDocument);Document htmlDocument = wordToHtmlConverter.getDocument();DOMSource domSource = new DOMSource(htmlDocument);StreamResult streamResult = new StreamResult(outStream);TransformerFactory factory = TransformerFactory.newInstance();Transformer serializer = factory.newTransformer();serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");serializer.setOutputProperty(OutputKeys.INDENT, "yes");serializer.setOutputProperty(OutputKeys.METHOD, "html");serializer.transform(domSource, streamResult);String content = baos.toString();logger.info("docToHtmlText--->{}", content);return content;} catch (Exception e) {logger.error("docToHtmlText 异常", e);throw new AppRuntimeException(e);} finally {baos.close();outStream.close();}}/*** 上传docx文档,返回解析后的Html*/public static String docxToHtmlText(MultipartFile file) throws Exception {ByteArrayOutputStream htmlStream = new ByteArrayOutputStream();try {// 将上传的文件传入Document转换XWPFDocument docxDocument = new XWPFDocument(file.getInputStream());XHTMLOptions options = XHTMLOptions.create();// 设置图片存储路径String path = System.getProperty("java.io.tmpdir");String firstImagePathStr = path + "/" + System.currentTimeMillis();options.setExtractor(new FileImageExtractor(new File(firstImagePathStr)));options.URIResolver(new BasicURIResolver(firstImagePathStr));// 转换htmldocxDocument.createNumbering();XHTMLConverter.getInstance().convert(docxDocument, htmlStream, options);String htmlStr = htmlStream.toString();String middleImageDirStr = "/word/media";String imageDirStr = firstImagePathStr + middleImageDirStr;File imageDir = new File(imageDirStr);String[] imageList = imageDir.list();if (imageList != null) {for (int i = 0; i < imageList.length; i++) {try {String oneImagePathStr = imageDirStr + "/" + imageList[i];File fileImage = new File(oneImagePathStr);if (fileImage.exists()) {String name = fileImage.getName();String suffix = name.substring(name.indexOf("."), name.length()).toLowerCase();//此处上传到自己的文件服务器 todoString qiNiuName = "";//文件名boolean upload = FileUtil.upload(new FileInputStream(fileImage), qiNiuName);   if (!upload) {continue;} else {//修改文档中的图片信息htmlStr = htmlStr.replace(oneImagePathStr, "上传后的图片地址");}}} catch (Exception e) {logger.info("upload docxToHtmlText exception", e);}}}//删除图片路径File firstImagePath = new File(firstImagePathStr);FileUtils.deleteDirectory(firstImagePath);return htmlStr;} catch (Exception e) {logger.error("docxToHtmlText 解析异常", e);throw new AppRuntimeException(e);} finally {if (htmlStream != null) {htmlStream.close();}}}/*    public static void main(String[] args) {try {String content = docxToHtmlText(getMulFileByPath("C:\\Users\\Administrator\\Desktop\\hah.docx"));System.out.println(content);} catch (Exception e) {e.printStackTrace();}}*//*** 获取MultipartFile文件** @param picPath* @return*/private static MultipartFile getMulFileByPath(String picPath) {FileItem fileItem = createFileItem(picPath);MultipartFile mfile = new CommonsMultipartFile(fileItem);return mfile;}private static FileItem createFileItem(String filePath) {FileItemFactory factory = new DiskFileItemFactory(16, null);String textFieldName = "textField";int num = filePath.lastIndexOf(".");String extFile = filePath.substring(num);FileItem item = factory.createItem(textFieldName, "text/plain", true,"MyFileName" + extFile);File newfile = new File(filePath);int bytesRead = 0;byte[] buffer = new byte[8192];try {FileInputStream fis = new FileInputStream(newfile);OutputStream os = item.getOutputStream();while ((bytesRead = fis.read(buffer, 0, 8192))!= -1) {os.write(buffer, 0, bytesRead);}os.close();fis.close();} catch (IOException e) {e.printStackTrace();}return item;}}

Java 将word文档转成html内容,输出到富文本相关推荐

  1. 使用java将word文档docx,doc(包含图形,文本框)完美转换成所有格式图片(pdf,png,gif,jpeg等等)

    使用java将word文档docx,doc(包含图形,文本框,图片等)完美转换成所有格式图片(pdf,png,gif,jpeg等等)下文中附带代码,效果图等 思路 使用到的包 实现代码 效果图: 思路 ...

  2. java将WORD文档转换成pdf文件

    总结对jacob和Itext学习总结.本文试验的是将WORD转换成PDF文件. 实现思路 一.先将WORD文档转换成HMTL文件格式(参阅我的前一文<JAVA操作WORD文档). 二.用流读取H ...

  3. java实现Word文档转换PDF文档

    最近需要实现在java语言Word文档转成PDF文档的功能,做了一下调研,最后使用aspose-words实现了该功能. 注意,aspose-words 为商业软件,本文仅是使用方法的demo,使用的 ...

  4. Java 将 Word 文档转换为 PDF 的完美工具

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:为什么魂斗罗只有 128 KB却可以实现那么长的剧情?个人原创+1博客:点击前往,查看更多 来源:https:/ ...

  5. azw3转换为pdf_干货:如何Java 将 Word 文档转换为 PDF

    在日常工作中,PDF格式良好的视觉阅读性和稳定性使其使用越来越广泛.因此我们常会遇到需要将成型的Word文档转换为PDF格式的情况.本文就将通过使用Java程序来演示如何将Word文档转换成PDF格式 ...

  6. Java将Word文档转换为PDF的完美工具

    引用至:https://mp.weixin.qq.com/s/JIgo3f98HufGJx23mgtvag Java 将 Word 文档转换为 PDF 的完美工具 在日常工作中,PDF格式良好的视觉阅 ...

  7. [摘]用Java生成Word文档

    开发中隔三叉五的就要用到Word,经常被搞得不胜其烦,不过这次找到了不少好例子,干脆将他们都摘了过来,内容如下: 1. poi是apache的一个项目,不过就算用poi你可能都觉得很烦,不过不要紧,这 ...

  8. Word处理控件Aspose.Words功能演示:用Java从Word文档中提取文本

    Aspose.Words For .NET是一种高级Word文档处理API,用于执行各种文档管理和操作任务.API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsof ...

  9. java实现word文档转pdf,并添加水印

    前段时间,项目需要自动生成word文档,用WordFreeMarker生成word文档后,又要求生成的文档能在浏览器浏览,思来想去,把word文档转成pdf就好了,于是乎研究了一下. 将word文档转 ...

最新文章

  1. BZOJ 4817: [Sdoi2017]树点涂色(LCT+树剖+线段树)
  2. 两种获取connectionString的方式
  3. onRetainNonConfigurationInstance和getLastNonConfigurationInstance
  4. PHP替换回车换行的三种方法
  5. 终于!华为在欧盟注册新商标“Harmony”;亚马逊AWS宣布张文翊“新官上任”;甲骨文失去竞购100亿美元国防部云计算合同资格...
  6. 计算机网络通信中常用的检错码,4月全国高等教育自学考试计算机网络与通信试题及答案解析...
  7. 【服务端渲染】NuxtJS基础
  8. RED HAT 7 性能监控工具
  9. 如何编写高质量的代码二 - 类的设计
  10. Robo 可视化mongoDb的操作
  11. 收藏的关于开发的一些东西
  12. 数据库成绩管理系统课程设计mysql_数据库学生成绩管理系统课程设计报告
  13. javaScript位移密码算法挑战
  14. 16款最佳HTML5超酷动画演示及源码
  15. 朗伯余弦定律(Lambert‘s Cosine Law)
  16. 尚医通项目学习笔记Part1
  17. 《爱你就像爱生命》读后
  18. ArcGIS中给地图图片添加经纬度坐标
  19. Hadoop安装教程_单机伪分布式配置_Hadoop2.6.0(2.7.1)Ubuntu14.04(16.04)
  20. 次世代PBR游戏模型流程到底是怎么样?

热门文章

  1. Matlab 模拟声波散射,一种目标声散射特征模拟装置的制作方法
  2. python离线环境迁移_Python离线项目迁移部署
  3. 周志华-机器学习 (绪论、模型评估与选择)
  4. 做人做事箴言录(4)
  5. 没有打不了的补丁切不了的面
  6. 花旗报告揭秘2016全球FinTech变革全景、“AI如何落地”公开课分享 | AI金融评论周刊...
  7. 微软账号登录后本地账号就关联了且没有改用本地账号登录如何解决?
  8. 血与泪的教训: JavaWeb中文乱码问题整合
  9. Matplotlib基础02:散点图、折线图与柱状图
  10. scp时提示【Read-only file system】的解决方案