• php将word中的omath转成mathml


    获取word的xml后,可用以下方式将所有的公式都提取并转换成mathml格式,再根据 自己的业务场景进行转换成latex、公式图片即可,mathml可用mathjax直接渲染。

    		// 解析xml
            $xml_document_weizhi = stripos($xml, '');
            $xml_document  = substr($xml, 0, $xml_document_weizhi);
            
            $mml_arrs= [];
    
            // 提取所有的公式,转化成mathml
            libxml_disable_entity_loader(false);
            preg_replace_callback('/()([\s\S]*?)(<\/m:oMath>)/', function ($matches) use ($xml_document,&$mml_arrs) {
                $mml =$xml_document.'' . $matches[0] . '';
                $domDocument = new DOMDocument();
                $domDocument->loadXML($mml);
                $numberings = $domDocument->getElementsByTagNameNS('http://schemas.openxmlformats.org/wordprocessingml/2006/main', 'body');
                $numberings = $numberings->item(0);
                $xsl        = new DOMDocument();
                $xsl->load('OMML2MML.XSL');
                $processor = new XSLTProcessor();
                $processor->importStyleSheet($xsl);
                $omml                = $processor->transformToXML($numberings);
                $omml                = str_replace('', '', $omml);
                $omml                = str_replace('xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math"', '', $omml);
                $omml                = str_replace("mml:", '', $omml);
                $omml                = str_replace("\n", '', $omml);
     			// 上面转换后部分公式非斜体,但是使用mathjax渲染时还是斜体,就把mi改成mo
                $omml = str_replace("'","'",$omml);
              
                $omml = str_replace("'","'",$omml);
                // 公式中的导数符号被解析成了单引号,经过尝试后用如下格式的mathml使用mathjax渲染后可用!
                $omml = str_replace("'","'",$omml);
                // 将公式中的斜体的中文都改成正体,在word中明明已取消了斜体,但是解析道德还是斜体,故批量把斜体中文改成正常字体
                $omml = preg_replace('/([\x{4e00}-\x{9fa5}]+)<\/mi>/isu','$1',$omml);
                $mml_arrs[] = $omml;
                return "";
            }, $xml);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    极智开发 | 讲解 Nginx 特性之一:反向代理
    大数据指标 透视50个DeFi头部协议
    react&antd问题(4)
    使用TypeScript和jsdom库实现自动化数据抓取
    相亲交友APP系统|婚恋交友社交软件|语音聊天平台定制开发
    lmxcms1.4
    Grafana 开源了一款 eBPF 采集器 Beyla
    有位p8终于把珍藏多年的算法视频给分享出来了,总共3.81G
    【PI仿真笔记2-电容模型2】
    springboot引入第三方jar包放到项目目录中,添加web.xml
  • 原文地址:https://blog.csdn.net/Golderant/article/details/133140766