java docx转html
源码地址: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相关推荐
- java docx文档解析_带有docx4j的Java Word(.docx)文档
java docx文档解析 几个月前,我需要创建一个包含许多表和段落的动态Word文档. 过去,我曾使用POI来实现此目的,但是我发现它很难使用,并且在创建更复杂的文档时对我来说效果不佳. 因此,对于 ...
- java docx转html实例_Java实现将word转换为html的方法示例【doc与docx格式】
Java实现将word转换为html的方法示例[doc与docx格式] 发布于 2020-6-14| 复制链接 摘记: 本文实例讲述了Java实现将word转换为html的方法.分享给大家供大家参考, ...
- JAVA docx/doc转html代码
在项目中有doc/docx转换成html代码,然后渲染到前端的需求,在此之前只是大概了解过poi有这方面的能力,但并未实操过.在实现过程中看过很多教程,也踩了很多坑,但时隔太久忘记了.话不多说,直接贴 ...
- Java Docx文件简介和解析
Docx简介 以Microsoft Office的doc/docx 为主要处理对象 Word2003和之前都是doc,文档格式不公开 Word2007和之后都是docx,文档格式公开,遵循XML路线 ...
- java docx转pdf_java word/doc/docx文档转PDF 加水印
本文实例讲述了java实现word文档转pdf并添加水印的方法.分享给大家供大家参考,具体如下: 前段时间,项目需要将上传的Word文档在浏览器浏览,思来想去,把word文档转成pdf就好了,于是乎研 ...
- java docx文件 合并 合并成一个大docx文件
为了合并多个docx文件成一个大的docx文件,你可以使用 Apache POI 库. Apache POI 是一个开源的 Java 库,可以用于读写 Microsoft Office 文件格式.你可 ...
- java docx 内存溢出_第2章 Java内存区域与内存溢出异常
本章主要介绍了Java的内存区域以及会触发对应区域内存溢出的触发条件及表现结果.同时还对java对象的内存布局进行了简单的讲解. 2.2 运行时数据区域: 比较直观的一张图来表示: Java虚拟机运行 ...
- java docx转pdf_如何在Java中将DOCX转换为PDF
自从Microsoft Word 2003中引入DOCX格式以来,由于其易于编辑和深入的设计选择,DOCX格式一直在全球各地的办公室中享有很高的知名度.但是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 ...
最新文章
- 2021年大数据Flink(二十五):Flink 状态管理
- BCH在支付上的优势
- 文档null一段 虚拟机操作
- 笔记本电脑投屏到电视_同是无线投屏器,家用级与商用级的区别,除了盘活老电视还能干嘛...
- python 基础之字符串方法
- vue 改变domclass_手机上的大片制作软件——如何使用VUE
- android mkv 字幕乱码,Android 西班牙语字幕乱码 字符编码
- Kotlin学习笔记17 反射Part1
- Android 性能优化方法
- Grabcut(一)
- 软件过程与项目管理第二周作业
- linux 系统命令和方法
- mysql实现高效率随机取数据
- 《数学之美》—简单之美-布尔代数和搜索引擎
- 电脑未安装任何音频设备解决办法
- 用python获取某年日历表
- java uml类图虚线实线_时序图的实线和虚线-类图中的实线与虚线-用例图中实线箭头表示什么...
- Local package.json exists, but node_modules missing, did you mean to install?
- 眼球追踪技术 Unity+ HTC vive Pro + DroolonF1 (二)
- 旅游攻略应该怎么做,你做对了吗?
热门文章
- Neo4j 任命方俊强为大中华区总经理
- 大中国之怪现状--假离婚
- extern用法总结
- 极简主义风格的应用方式,在纽约现代美术馆的体现,技术,思潮,思维有哪些?...
- 1036.old bill
- 【系统分析师之路】2014年上系统分析师下午论文真题
- 【C/C++】坐标旋转算法
- 【正点原子FPGA连载】第四十九章OV5640摄像头HDMI灰度显示实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
- 用python处理股票龙头股_Python股票分析系列:基础股票数据操作(二)
- C++ 鼠标点击的获取