源码地址:https://github.com/sunmaolin/wordToHtml
含doc转html,docx转html等相关实例代码。一看就会,一写就对。

前言

提示:本文使用POI工具进行转换。

需求:公司之前发布的报告内容是word文件。现在需要改为富文本编辑嵌入到页面中(为了被百度检索到)。之前发布的报告也需要修改保存。那现在出现的问题就是word如何转换为html格式,且图片需要上传到云存储中
问题1: poi只针对于doc格式的文件可以做转换。docx做不到。
问题2: 针对问题1,我将docx另存为doc文件。转换后发现样式是写在style标签中。而我需要内联样式。也就是转为html文件是可以的,但是转为html片段可行性不高。当然也可以使用jsoup进行解析处理(太费劲)。
问题3: 针对问题2,我检索发现存在xdocreport插件可以将poi中的XWPF转换为HTML,且可以为内联样式。但是其中图片是存储到本地。我需要上传到云存储中。

针对问题3,下面是解决方案。


一、xdocreport是什么?

XDocReport means XML Document reporting. It’s Java API to merge XML document created with MS Office (docx) or OpenOffice (odt), LibreOffice (odt) with a Java model to generate report and convert it if you need to another format (PDF, XHTML…).

github:XDocReport

二、POM文件

新旧版本的使用方式不一样。但是原理是一模一样。由于XDocReport中已经依赖了POI。所以无需额外引入。如果项目中存在POI依赖。注意版本冲突。

2.1 老版本

<!--github https://github.com/opensagres/xdocreport -->
<dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>org.apache.poi.xwpf.converter.xhtml</artifactId><version>1.0.5</version>
</dependency>

2.2 新版本

新版本,将名字改了,不在以org.apache.poi命名。

<!--github https://github.com/opensagres/xdocreport -->
<dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.poi.xwpf.converter.xhtml</artifactId><version>2.0.3</version>
</dependency>

三、编码

此处只以新版本2.0.3进行编码。推荐使用。

3.1 自定义ImageManager

import fr.opensagres.poi.xwpf.converter.core.ImageManager;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/*** 自定义word转html图片处理器* @author 孙茂林* @date 2022-06-10*/
public class CustomImageManager extends ImageManager {/*** 根据插件自动生成的地址与上传到服务器的地址做映射缓存*/Map<String, String> imageUrlCache = new HashMap<>();public CustomImageManager() {super(null, null);}@Overridepublic String resolve(String uri) {return imageUrlCache.get(uri);}@Overridepublic void extract(String imagePath, byte[] imageData) throws IOException {/*参数imagePath example: word/media/image1.png word/media/image2.png */// 1.保存图片到云存储服务器返回访问链接String serverImageUrl = "https://aliyun-xxx.fervwswv.image";// 2.做映射缓存imageUrlCache.put(imagePath, serverImageUrl);}
}

3.2.转换为html

import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLConverter;
import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.junit.Test;import java.io.FileInputStream;
import java.io.FileOutputStream;/*** @author 孙茂林* @date 2022-06-10*/
public class CustomTestHtml {private static final String sourceFile = "C:\\Users\\QM\\Desktop\\a.docx";private static final String targetFile = "C:\\Users\\QM\\Desktop\\a.html";@Testpublic void poiDocxNew() throws Exception {FileInputStream fileInputStream = new FileInputStream(sourceFile);XWPFDocument wordDocument = new XWPFDocument(fileInputStream);// 使用自定义图片管理。直接将文件上传至云服务器XHTMLOptions xhtmlOptions = XHTMLOptions.create().setImageManager(new CustomImageManager());// 将样式都写为内联样式,而不是写到style标签中 默认falsexhtmlOptions.setFragment(true);// 省略掉footer,header标签 默认falsexhtmlOptions.setOmitHeaderFooterPages(true);// 忽略未用到的样式 默认truexhtmlOptions.setIgnoreStylesIfUnused(true);// 缩进 默认不缩进// xhtmlOptions.indent(10);XHTMLConverter.getInstance().convert(wordDocument, new FileOutputStream(targetFile), xhtmlOptions);}}

java docx转html相关推荐

  1. java docx文档解析_带有docx4j的Java Word(.docx)文档

    java docx文档解析 几个月前,我需要创建一个包含许多表和段落的动态Word文档. 过去,我曾使用POI来实现此目的,但是我发现它很难使用,并且在创建更复杂的文档时对我来说效果不佳. 因此,对于 ...

  2. java docx转html实例_Java实现将word转换为html的方法示例【doc与docx格式】

    Java实现将word转换为html的方法示例[doc与docx格式] 发布于 2020-6-14| 复制链接 摘记: 本文实例讲述了Java实现将word转换为html的方法.分享给大家供大家参考, ...

  3. JAVA docx/doc转html代码

    在项目中有doc/docx转换成html代码,然后渲染到前端的需求,在此之前只是大概了解过poi有这方面的能力,但并未实操过.在实现过程中看过很多教程,也踩了很多坑,但时隔太久忘记了.话不多说,直接贴 ...

  4. Java Docx文件简介和解析

    Docx简介 以Microsoft Office的doc/docx 为主要处理对象 Word2003和之前都是doc,文档格式不公开 Word2007和之后都是docx,文档格式公开,遵循XML路线 ...

  5. java docx转pdf_java word/doc/docx文档转PDF 加水印

    本文实例讲述了java实现word文档转pdf并添加水印的方法.分享给大家供大家参考,具体如下: 前段时间,项目需要将上传的Word文档在浏览器浏览,思来想去,把word文档转成pdf就好了,于是乎研 ...

  6. java docx文件 合并 合并成一个大docx文件

    为了合并多个docx文件成一个大的docx文件,你可以使用 Apache POI 库. Apache POI 是一个开源的 Java 库,可以用于读写 Microsoft Office 文件格式.你可 ...

  7. java docx 内存溢出_第2章 Java内存区域与内存溢出异常

    本章主要介绍了Java的内存区域以及会触发对应区域内存溢出的触发条件及表现结果.同时还对java对象的内存布局进行了简单的讲解. 2.2 运行时数据区域: 比较直观的一张图来表示: Java虚拟机运行 ...

  8. java docx转pdf_如何在Java中将DOCX转换为PDF

    自从Microsoft Word 2003中引入DOCX格式以来,由于其易于编辑和深入的设计选择,DOCX格式一直在全球各地的办公室中享有很高的知名度.但是9当涉及到兼容性,尤其是最终用户的查看一致性 ...

  9. java docx word api_javadoc生成word接口文档

    PHP 5.4 on CentOS/RHEL 6.4 and 5.9 via Yum PHP 5.4 on CentOS/RHEL 6.4 and 5.9 via Yum PHP 5.4.16 has ...

最新文章

  1. 2021年大数据Flink(二十五):Flink 状态管理
  2. BCH在支付上的优势
  3. 文档null一段 虚拟机操作
  4. 笔记本电脑投屏到电视_同是无线投屏器,家用级与商用级的区别,除了盘活老电视还能干嘛...
  5. python 基础之字符串方法
  6. vue 改变domclass_手机上的大片制作软件——如何使用VUE
  7. android mkv 字幕乱码,Android 西班牙语字幕乱码 字符编码
  8. Kotlin学习笔记17 反射Part1
  9. Android 性能优化方法
  10. Grabcut(一)
  11. 软件过程与项目管理第二周作业
  12. linux 系统命令和方法
  13. mysql实现高效率随机取数据
  14. 《数学之美》—简单之美-布尔代数和搜索引擎
  15. 电脑未安装任何音频设备解决办法
  16. 用python获取某年日历表
  17. java uml类图虚线实线_时序图的实线和虚线-类图中的实线与虚线-用例图中实线箭头表示什么...
  18. Local package.json exists, but node_modules missing, did you mean to install?
  19. 眼球追踪技术 Unity+ HTC vive Pro + DroolonF1 (二)
  20. 旅游攻略应该怎么做,你做对了吗?

热门文章

  1. Neo4j 任命方俊强为大中华区总经理
  2. 大中国之怪现状--假离婚
  3. extern用法总结
  4. 极简主义风格的应用方式,在纽约现代美术馆的体现,技术,思潮,思维有哪些?...
  5. 1036.old bill
  6. 【系统分析师之路】2014年上系统分析师下午论文真题
  7. 【C/C++】坐标旋转算法
  8. 【正点原子FPGA连载】第四十九章OV5640摄像头HDMI灰度显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
  9. 用python处理股票龙头股_Python股票分析系列:基础股票数据操作(二)
  10. C++ 鼠标点击的获取