当前位置: 首页 > news >正文

海珠区网站建设如何制作网站免费建站

海珠区网站建设,如何制作网站免费建站,赤峰做网站开发,wordpress主题 mnews1.9最近做一个富文本的需求,要求把文档内容转换到富文本内,文档中的格式也好,样式也好,图片啥的都要一致展示;踩了不少坑,据说word文档其实是一个压缩包,我不是特别清楚但是也能理解,自…

        最近做一个富文本的需求,要求把文档内容转换到富文本内,文档中的格式也好,样式也好,图片啥的都要一致展示;踩了不少坑,据说word文档其实是一个压缩包,我不是特别清楚但是也能理解,自己借鉴参考凑合看的,大佬勿喷

        啥都不说了看代码吧;其中关于图片的导出有两种方式比较大的那种是用的jdk8自带的base

64搞的,大小有差别同一个图片的话我这个实测的图片是差200k左右,有要求的你可以换着来引用;jar的引用pom中有

        <!--注意版本保持一致 poi poi-ooxml  poi-scratchpad--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><!-- 操作doc ppt xls  --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.2</version></dependency><!-- 操作docx pptx xlsx  --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>fr.opensagres.xdocreport</groupId><artifactId>fr.opensagres.poi.xwpf.converter.xhtml</artifactId><version>2.0.2</version></dependency>

import fr.opensagres.poi.xwpf.converter.core.BasicURIResolver;
import fr.opensagres.poi.xwpf.converter.core.FileImageExtractor;
import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLConverter;
import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLOptions;
import lombok.extern.slf4j.Slf4j;
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.usermodel.XWPFDocument;
import org.springframework.web.multipart.MultipartFile;
import org.w3c.dom.Document;
import sun.misc.BASE64Encoder;import javax.imageio.ImageIO;
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 java.awt.image.BufferedImage;
import java.io.*;
import java.util.Base64;/*** @author :Xiaoning Fan* @date :Created in 2023-10-16 下午 3:49* @description: 上传word文档并转换为html字符串返回,保持样式不变,图片替换为base64* @version: 1.0*/
@Slf4j
public class WordToHtmlStringConverter {/*** wordToHtml** @return* @throws IOException* @throws ParserConfigurationException* @throws TransformerException*/public static String wordToHtml(MultipartFile file) {
//        提取出word文档名称和后缀String filename = file.getOriginalFilename();try {if (filename.endsWith(".docx")) {// 将上传的文件传入Document转换return new WordToHtmlStringConverter().docxToHtmlText(file);} else if (filename.endsWith(".doc")) {return new WordToHtmlStringConverter().docToHtmlText(file);} else {log.error("不支持的文件格式!");return null;}} catch (FileNotFoundException e) {log.error("文件找不到异常!");e.printStackTrace();} catch (IOException e) {log.error("io转换异常!");e.printStackTrace();} catch (Exception e) {log.error("文件转换异常!");e.printStackTrace();}return null;}/*** 上传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 "[不能识别的图片]";}//此处转换图片文件为Base64return Base64.getEncoder().encodeToString(imageStream).trim();} catch (Exception e) {log.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();log.info("docToHtmlText--->{}", content);return content;} catch (Exception e) {log.error("docToHtmlText 异常", e);} finally {baos.close();outStream.close();}return null;}/*** 上传docx文档,返回解析后的Html*/public static String docxToHtmlText(MultipartFile file) throws Exception {ByteArrayOutputStream htmlStream = new ByteArrayOutputStream();ByteArrayOutputStream htmlImg = new ByteArrayOutputStream();String htmlStr = null;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);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()) {log.info("处理图片开始。。。。。。。。");// 处理图片成为Base64格式// 读取图片字节数组InputStream in = new FileInputStream(fileImage);byte[] data = new byte[in.available()];in.read(data);String encode = new BASE64Encoder().encode(data);log.info("处理图片结束。。。。。。。" + encode);//修改文档中的图片信息htmlStr = htmlStr.replace(oneImagePathStr, "data:image/png;base64,"+encode);/* BufferedImage bi = ImageIO.read(fileImage);// 图片存储大小比较大ByteArrayOutputStream baos = new ByteArrayOutputStream();ImageIO.write(bi, "png", baos);byte[] bytes = baos.toByteArray();String sd =  Base64.getEncoder().encodeToString(bytes).trim();log.info("处理图片结束。。。。。。。" + sd);htmlStr = htmlStr.replace(oneImagePathStr, "data:image/png;base64,"+sd);*/}} catch (Exception e) {log.info("upload docxToHtmlText exception", e);}}}log.info("处理结果:{}", htmlStr);} catch (Exception e) {log.error("docxToHtmlText 解析异常", e);} finally {if (htmlStream != null) {htmlStream.close();}return htmlStr;}}
}

直接引用就行,但是有一点,一定要注意接口返回的时候,如果直接返回页面接口上要加

@ResponseBody不然就悲剧了;当然如果直接存库的那就无所谓了

这次就先这样,自娱自乐,手下留情勿喷!!

http://www.zhongyajixie.com/news/13073.html

相关文章:

  • 旅游网站模板源码360网站seo手机优化软件
  • asp.net手机网站开发2022当下社会热点话题
  • 做一个网站开发项目有哪些阶段做网页多少钱一个页面
  • 怎么做网站策划免费推广神器
  • 网站建设和优化成都百度
  • 绍兴网站制作网站平台推广方式
  • wordpress+widget+开发郑州厉害的seo顾问公司
  • 厦门手机网站建设是什么上海最新发布
  • 做问卷赚钱网站福州百度推广开户
  • 南京做网站设计外包公司有哪些
  • 网站开发中怎么设置快捷键简述网站制作的步骤
  • 不用下载直接浏览的网站营销推广方案
  • 中石化网站群建设合肥seo网络优化公司
  • 武汉做网站的公司哪家好百度广告推广费用年费
  • 莆田专业建站公司百度页面推广
  • 做网站怎么买服务器吗怎么做盲盒
  • 什么网站广告做多企业域名查询
  • wordpress显示选项屏蔽自定义栏目武汉seo价格
  • 个人网站建站的流程seo视频教程我要自学网
  • 怎样做医疗网站不违法建站教程
  • 查询类网站怎么做seo策略是什么意思
  • 网站建设中排名掉了网页设计制作网站素材
  • 罗湖做网站哪家好免费影视软件靠什么赚钱
  • 要服务网站建设百度推广优化公司
  • cms网站建设有多少条数据搜索引擎优化管理实验报告
  • 电子商务旅游网站建设策划书快速排名网站
  • 做网站联系电话模板建站教程
  • 网站的开发工具如何实施网站推广
  • 网站诊断书怎么做网站优化排名工具
  • 龙华网站(建设龙华信科)如何建立网站 个人