word 转 html cms,Java 将Word文件转换为HTML格式文件

前言:在很多时候我们都需要到项目中导入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 "文件转换失败";

}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 中函数如何转存_mysql 导入导出数据库以及函数、存储过程 【转】

MySQL常用导出数据命令:1.mysql导出整个数据库mysqldump -hhostname -uusername -ppassword databasename > backupfile.sqlmysqldump -hlocalhost -uroot hqgr> hqgr.sql (如果root用户没用密码可以不写-p,当然导出的sql文件你可以制定一个路…

1500度的近视能学计算机吗,1500度近视考驾照,近视多少度不能考驾照

情人眼里出西施,所以眼睛的地位真的无可替代,让我们认识了这个五彩缤纷的世界。但是也有一批深度近视的人群,他们也想像常人一样考取驾照,掌握这个社会的基本技能。有的人说近视1500度不能考取驾照,真的是这样吗&#…

mysql怎样实现先判断后联合_MYSQ创建联合索引,字段的先后顺序,对查询的影响分析...

MYSQ创建联合索引,字段的先后顺序,对查询的影响分析前言对于联合索引我们知道,在使用的时候有一个最左前缀的原则,除了这些呢,比如字段放置的位置,会不会对索引的效率产生影响呢?最左匹配原则联…

上海事业编制 计算机 待遇怎么样,事业单位情况

2010-09-12我们在公路系统工作,用工单位是事业单位编制,由上级部门批准招录下达指标。由于单位缺人,单位临时招录我们(不带指标),我们已工作八年,自2003-2009一直签订合同,2009年到期后至今未签订合同&…

mysql count count id_mysql 为什么count(*)快于count(id)

其实,挺正常的,count的用法大概有两个,不过一般大家不太注意:统计某个列( 俗称字段 )有多少个有效值,也就是值不是null的有多少个。统计记录有多少行,我背诵过的规则是这样的:当count()括弧的表…

如何修改操作系统运行服务器,如何设置Bios 最常见bios设置与修改详细图解教程...

平时我们在使用计算机的时候一般很少会接触到BIOS,很多人都是在安装操作系统时才接触到的,因为在使用光盘安装系统时需将计算机的BIOS设置为从光驱启动,在重装系统、设置硬盘模式以及一些特殊情况都需要进入bios里面,进行相关设置…

mysql 回滚失败_Mysql非事务表回滚失败的现象

执行ROLLBACK(回滚)时,如果收到下述消息,表示事务中使用的1个或多个表不支持事务: 警告:某些更改的非事务性表不能被回滚。 这些非事务性表不受ROLLBACK语句的影响。 如果在事务中意外地混合了事务性表和非事务性表,导…

在线服务器和客户端聊天,实验三、客户端和服务器能实现简单的聊天功能

《实验三、客户端和服务器能实现简单的聊天功能》由会员分享,可在线阅读,更多相关《实验三、客户端和服务器能实现简单的聊天功能(6页珍藏版)》请在人人文库网上搜索。1、实验三、客户端和服务器能实现简单的聊天功能1、实验目的:熟悉基于流式…

mysql连表查询on条件_mysql 外连接的时候,条件在on后面和条件在where后面的区别...

最近使用mysql的时候碰到一个问题:当一个表外联另一个表的时候,将一些查询条件放在on后面和放在where后面不太一样:学生分数表stuscore:当查询语句如下(查询语句1):SELECT a.name,a.subject,a.score,a.stuid ,b.name,b…

应运ajax的几种语言,Ajax指的是什么

Ajax指的是什么发布时间:2020-08-05 14:18:52来源:亿速云阅读:103作者:小新这篇文章将为大家详细讲解有关Ajax指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可…

oracle 数据导入 mysql_oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)...

这篇文章主要介绍了oracle导入导出数据的二种方法,利用PL/SQL Developer工具导出和利用cmd的操作命令导出的出方法,大家参考使用吧方法一:利用PL/SQL Developer工具导出:菜单栏---->Tools---->Export Tables,如下…

iphone文件怎么上传到服务器,iPhone编程中文件上传到HTTP服务器

宝慕林4294392下面的代码使用HTTPPOST将NSData发布到Web服务器。您还需要一些PHP方面的知识。NSString *urlString "http://yourserver.com/upload.php";NSString *filename "filename";request [[[NSMutableURLRequest alloc] init] autorelease];[requ…

tomcat 启动项目 页面文字乱码_项目通过tomcat部署到服务器,请求数据页面中文乱码问题...

问题描述:1、将项目部署到服务器之后从页面接收的中文乱码2、数据库中原有的数据都能正常显示产生原因:没有对Tomcat服务器和mysql进行配置更改解决流程:一、 修改Tomcat配置更改两个文件的配置1.server.xml(添加红色部分)URIEncoding"U…

小米手机文件 ftp服务器,小米手机与电脑FTP连接(不用每一次都输入ftp地址)...

用过小米miui的用户都知道,miui的“文件管理”里边有一个非常好用的功能-远程管理,如果手机与电脑都在同一个wifi网络下,即同一个局域网内,不用数据线直接就可以连接。打开手机的文件管理—远程管理—启动服务,将生成一…

第五人格服务器维修中怎么进,第五人格进不去怎么办 游戏进不去解决方法详解[多图]...

第五人格开启测试已经有一段时间,许多玩家都会遇到各种问题,其中游戏进不去是让玩家最头痛的,今天安族小编来给大家介绍一下游戏进不去解决方法详解。第五人格进不去解决方法大家在玩的时候,肯定都会遇到卡顿、进不去或者是不能玩…

mysql数据库查询语句过程_mysql(一) SQL查询语句执行过程

mysql基础架构 示意图首先 mysql 大概分为 server层 和 存储引擎层 两个部分, 引擎的架构模式是插件形式的,mysql支持多种引擎如 InnoDB、MyISAM、Memory 等,其中 Innodb是应用最广泛的,mysql5.5.5版本后,将Innodb设为…

Ajax解析laravelJSON,3分钟短文:Laravel请求体内JSON格式数据的处理办法

原标题:3分钟短文:Laravel请求体内JSON格式数据的处理办法引言前几篇文章我们讲了表单数据的接收,验证等功能。也说到了传送的数组如何处理, 今天我们说一下如果传送的数据是JSON格式,其处理流程。学习时间如果知道传入…

python数据批量写入iq数据库_通过Load table命令将数据文件加载到Sybase IQ数据库里面的Python脚本...

CREATE TABLE poc_app.sys_ftp_cfg(ftp_id varchar(100) NOT NULL, --话单文件名标记ftp_cycle_id varchar(1) NOT NULL, --话单文件名周期ftp_stage_filepath varchar(255) NOT NULL, --话单处理后路径ftp_stage_filereg …

监听某个区域滚动_监听页面滚动及滚动到指定位置

一、原生js通过window.onscroll监听window.onscroll function() {//为了保证兼容性,这里取两个值,哪个有值取哪一个//scrollTop就是触发滚轮事件时滚轮的高度var scrollTop document.documentElement.scrollTop || document.body.scrollTop;console.lo…

mysql 14.12_MySQL必知必会12-14 汇总 分组 子查询

12 汇总数据-用聚集类函数用于诸如:表中的行数、表中行组的和、列中的最大值平均值等。(python的dataframe 在输出此类结果时有优势)MySQL 五个聚集函数(其它还有:标准偏差聚集函数等)AVG()COUNT()MAX()MIN()SUM()SELECT AVG(alltotal) FROM yc_tmp;SELE…