##把docx里面的文字,公式和图片转成html大体需要如下的方式

  1. 把docx的文字转成poi的XWPFDocument
    InputStream is=new FileInputStream("d:\\1.docx");XWPFDocument docx = new XWPFDocument(is);
  1. 得到内容的列表,包括XWPFParagraph和XWPFTable 通过BodyElementType区分
List<IBodyElement> eles = docx.getBodyElements();
for (IBodyElement e : eles) {if (e.getElementType().equals(BodyElementType.PARAGRAPH)){XWPFParagraph p = (XWPFParagraph) e;handleParagraph(e):}else if(e.getElementType().equals(BodyElementType.TABLE){handleTable(e);}
  1. 得到XWPFParagraph 后,通过如下两个方法得到XWPFParagraph里面的具体内容
List<XWPFRun> runs = p.getRuns();//文本和图片
List<XWPFPicture> pics = run.getEmbeddedPictures();//得到所有图片
再把图片保存起来就可以了。
List<CTOMath> oMathList = p.getCTP().getOMathList();//公式
//公式这个就复杂了CTOMath属于XmlObject形式的xml文件,属于OMML,要先转成MathML,再把MathML转成png,保存到硬盘上。
//把XmlObject转成MathML
private static String getMathML(XmlObject xmlObject) throws Exception {final String xslFile = "/cn/com/eduedu/jee/util/OMML2MML.XSL";StreamSource stylesource = new StreamSource(MSDocxUtils.class.getResourceAsStream(xslFile));Transformer transformer = TransformerFactory.newInstance().newTransformer(stylesource);Node node = xmlObject.getDomNode();DOMSource source = new DOMSource(node);StringWriter stringwriter = new StringWriter();StreamResult result = new StreamResult(stringwriter);transformer.setOutputProperty("omit-xml-declaration", "yes");transformer.transform(source, result);String mathML = stringwriter.toString();stringwriter.close();// The native OMML2MML.XSL transforms OMML into MathML as XML having special// name spaces.// We don't need this since we want using the MathML in HTML, not in XML.// So ideally we should changing the OMML2MML.XSL to not do so.// But to take this example as simple as possible, we are using replace to get// rid of the XML specialities.mathML = mathML.replaceAll("xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\"", "");mathML = mathML.replaceAll("xmlns:mml", "xmlns");mathML = mathML.replaceAll("mml:", "");return mathML;}
//MathML转成Document
private static Document convertStringToDocument(String xmlStr) {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  DocumentBuilder builder;  try  {  builder = factory.newDocumentBuilder();  Document doc = builder.parse( new InputSource( new StringReader( xmlStr ) ) ); return doc;} catch (Exception e) {  e.printStackTrace();  } return null;}
//最后的代码是这样的
private static String convertOmathToPng(XmlObject xmlObject,MSDocxToHtmlImageParser imageParser) throws Exception {pngNumber++;Document document=convertStringToDocument(getMathML(xmlObject));Converter mathMLConvert =Converter.getInstance();LayoutContextImpl localLayoutContextImpl = new LayoutContextImpl(LayoutContextImpl.getDefaultLayoutContext());localLayoutContextImpl.setParameter(Parameter.MATHSIZE, 18);ByteArrayOutputStream  os=new ByteArrayOutputStream();mathMLConvert.convert(document,os, "image/png", localLayoutContextImpl);String pngName=imageParser.parse(os.toByteArray(), "png_"+pngNumber+".png");os.close();return "<img src='"+pngName+"'/>";}

###用到的所有包


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;import org.apache.poi.POIXMLProperties;
import org.apache.poi.xwpf.usermodel.BodyElementType;
import org.apache.poi.xwpf.usermodel.IBodyElement;
import org.apache.poi.xwpf.usermodel.UnderlinePatterns;
import org.apache.poi.xwpf.usermodel.VerticalAlign;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFPicture;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFStyles;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.officeDocument.x2006.math.CTOMath;
import org.openxmlformats.schemas.officeDocument.x2006.math.CTOMathPara;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;import cn.com.eduedu.jee.util.wordnumber.IWordNumber;
import cn.com.eduedu.jee.util.wordnumber.WordNumberFactory;
import net.sourceforge.jeuclid.context.LayoutContextImpl;
import net.sourceforge.jeuclid.context.Parameter;
import net.sourceforge.jeuclid.converter.Converter;

这里有更详细的文章
这里有更详细的文章,能解决更多的问题

word转html包含公式和图片相关推荐

  1. spring使用freemarker生成word文档包含表格、图片(循环插入)

    spring使用freemarker生成word文档包含表格.图片(循环插入) 效果图 因为测试数据是重复的,所以显示都是重复的数据,替换导入map中的数据可以显示不重复的数据. 操作步骤 1,创建一 ...

  2. word转03版本公式变成图片_docx转doc时,防止公式被转成图片的解决办法

    编辑社回复需要doc(Word 97-2003)格式的文档,可是将docx(Word 2007+)另存为doc格式时,发现公式被转成了图片.其实,最简单的办法就是,打个电话过去给编辑社:"大 ...

  3. python docx 合并文档 图片_Python检查Word文件中包含特定关键字的所有页码

    推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社图书详情:配套资源:用书教师可以联系董老师获取教学大纲.课件.源码.教案.考试系 ...

  4. visio图中包含公式,插入word后公式模糊终极解决办法

    最近被毕业论文支配,各种无力,visio图中包含公式,插入word中公式变得很模糊,根本不能用,网上各种找解决办法都没用,最后无意中一位网友道出了真相 终极解决办法 是visio版本问题,我用的vis ...

  5. Mathpix图片转LaTeX,Word快速插入LaTeX公式教程

    文章目录 1 使用Mathpix截图识别公式 2 LaTeX转MathML格式 3 Word中将MathML转公式 3.1 设置word粘贴选项 3.2 设置word公式格式 3.3 直接粘贴成公式 ...

  6. 记录一下 Java 代码实现文件夹、文件的对比,主要包含 word、pdf、文本、图片等相关文件的对比计算,以及计算文本的相似率(重复率)、筛选出差异的文件、方便文件和文档的去重,并封装为jar包

    记录一下 Java 代码实现文件夹.文件的对比,主要包含 word.pdf.文本.图片等相关文件的对比计算,以及计算文本的相似率(重复率).筛选出差异的文件.方便文件和文档的去重,并把所有的源码封装为 ...

  7. word操作之docx转doc出现公式变图片问题的解决方案

    很多基于word的在线文档提交系统,如各类申报书提交系统经常要求上传doc格式(word 97-2003)的文件.然而目前word最常用版本的后缀名为docx,在docx转为doc时,常常会出现公式变 ...

  8. Python检查Word文件中包含特定关键字的所有页码

    推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社 图书详情: 配套资源: 用书教师可以联系董老师获取教学大纲.课件.源码.教案. ...

  9. WORD中插入的公式与文字对不齐——公式比文字高——文字比公式低

    WORD中插入的公式与文字对不齐--公式比文字高--文字比公式低 2013年3月13日18:59:52 2012年11月10日23:46:06 如题,方法有两种,推荐使用方法2. 1.相关软件介绍: ...

最新文章

  1. jquery获取元素的值,获取当前对象的父对象等等
  2. 洛谷 - P4173 残缺的字符串(多项式匹配字符串-NTT)
  3. 软件工程---2.软件过程
  4. Spring —— 容器内部逻辑
  5. Web前端面试指导(六):面试后需要总结和交流
  6. 远程桌面配置php,Win2008 R2实现多用户远程连接设置方法(图)
  7. 2021年十大 web hacking 技术汇总
  8. ubuntu下的tomcat监控脚本
  9. POJ-1328(Greedy,Vector,Sort,Iterator)
  10. python爬虫好学不_python爬虫难学吗
  11. 中国建筑抗震设计规范反应谱v2.0(2012a)运行环境
  12. c语言中的空字符常量,c习题编译时出现空的字符常量,怎么修改?
  13. 【python】基础语法
  14. 一元二次方程求根。当a=0时,输出“It is not a quadratic equation \n“;当a不等于0时,输出“一对共轭复根: “x1 = %.2f+%.2fi, x2 = %.2f
  15. 【原生JavaWeb】网页前端页面如何调用后端Java程序
  16. Ubuntu 向日葵被远控无法显示图形化界面的解决方案
  17. 字体设计中什么是断笔设计啊
  18. 洛谷 1282 多米诺骨牌#线性动态规划#
  19. 记录学习 - spring5
  20. 集束搜索(Beam Search Algorithm )

热门文章

  1. 数据可视化工具 - ECharts饼形图的编写
  2. 正向KL散度与反向KL散度
  3. 解决使用phpspreadsheet导出Xlsx纯数字字符串变成科学计数法的问题
  4. 绕过Nvidia官方要求的注册或登陆步骤直接下载cuDNN的方法
  5. 配置ftp服务器实现文件传输,配置ftp服务器实现文件传输
  6. 十进制转二进制(算法水题)
  7. Serv-U管理密码破解方案?
  8. (完整版)2022大厂Java八股文面试题库|附答案
  9. Java线程池的核心线程数和最大线程数
  10. SQL中的单行注释,多行注释