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

私人设计网站推荐h5页面制作软件thinkphp

私人设计网站推荐,h5页面制作软件thinkphp,广告设计公司如何壮大,wordpress建站菜单栏 二级标题最近做一个富文本的需求#xff0c;要求把文档内容转换到富文本内#xff0c;文档中的格式也好#xff0c;样式也好#xff0c;图片啥的都要一致展示#xff1b;踩了不少坑#xff0c;据说word文档其实是一个压缩包#xff0c;我不是特别清楚但是也能理解#xff0c;自…        最近做一个富文本的需求要求把文档内容转换到富文本内文档中的格式也好样式也好图片啥的都要一致展示踩了不少坑据说word文档其实是一个压缩包我不是特别清楚但是也能理解自己借鉴参考凑合看的大佬勿喷 啥都不说了看代码吧其中关于图片的导出有两种方式比较大的那种是用的jdk8自带的base 64搞的大小有差别同一个图片的话我这个实测的图片是差200k左右有要求的你可以换着来引用jar的引用pom中有 !--注意版本保持一致 poi poi-ooxml poi-scratchpad--dependencygroupIdorg.apache.poi/groupIdartifactIdpoi/artifactIdversion4.1.2/version/dependency!-- 操作doc ppt xls --dependencygroupIdorg.apache.poi/groupIdartifactIdpoi-scratchpad/artifactIdversion4.1.2/version/dependency!-- 操作docx pptx xlsx --dependencygroupIdorg.apache.poi/groupIdartifactIdpoi-ooxml/artifactIdversion4.1.2/version/dependencydependencygroupIdfr.opensagres.xdocreport/groupIdartifactIdfr.opensagres.poi.xwpf.converter.xhtml/artifactIdversion2.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.tj-hxxt.cn/news/233769.html

相关文章:

  • 如何选取网站关键词科技画4k纸科幻画一等奖
  • 关于集团网站建设的修改请示首码项目推广平台
  • wordpress编辑网站嵌入式软件开发专业
  • 东莞做网站那家好南昌网站建设制作与维护
  • 微信网页制作网站建设京网站建设
  • 搜狐快站怎么样温州自助模板建站
  • 济南网站建设搜q.479185700泰安网上申请货车通行证
  • 贵阳网站建设hsyunso网络推广大概需要多少钱
  • 自己做的网站本地调试骨科医生咨询在线咨询免费
  • 代备案网站空间移动端网站开发与网页开发区别
  • 博兴做网站郑州关键词排名公司电话
  • 网站什么情况要更新wordpress5.0.1
  • 青岛网站建设价格网站建设方案前言
  • 成都鲜花网站建设小程序商城免费
  • 景县有专业做网站人员吗服务器怎么发布网站
  • 建设公司董事长致辞网站范文网站排名怎么提升
  • 江苏 网站集约化建设方案网络营销专业课程
  • 创建电子商务网站的步骤临沂哪里有做网站的
  • 南昌门户网站建设看广告挣钱一天300元
  • 如何运营一个行业网站网站建设公司没落
  • 做ppt模板的网站网站为契机建设校园数字化
  • 塘沽建设网站公司女生读电子商务好就业吗
  • 开店加盟北京网站优化公司 卓立海创
  • 个人网站备案描述招商加盟类网站模板
  • 如何快速提升网站关键词排名企业管理考研
  • 网站建设要什么证件免费公司网页制作
  • 建筑行业人才网aso优化技巧大aso技巧
  • 电子商务网站规划书范文儿童手工
  • 网站主页面设计哪个好90后做网站
  • 自学做网站需要学会哪些学动漫制作需要什么基础