From 607578a90b1fa1ee3ad13bbc6e073ac620ecfd4b Mon Sep 17 00:00:00 2001 From: jzy <928294064@qq.com> Date: Sat, 1 Nov 2025 00:35:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81word=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E6=96=87=E5=AD=97=EF=BC=8C=E5=85=AC=E5=BC=8F=EF=BC=8C=E5=9B=BE?= =?UTF-8?q?=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-api/pom.xml | 27 + .../com/ruoyi/api/controller/MathMLController.java | 175 + .../com/ruoyi/api/controller/MathMLConverter.java | 100 + ruoyi-api/src/main/resources/MML2OMML.XSL | 3822 ++++++++++++++++++++ ruoyi-api/src/main/resources/OMML2MML.XSL | 2076 +++++++++++ ruoyi-api/src/main/resources/OMML2MML1.XSL | 2068 +++++++++++ 6 files changed, 8268 insertions(+) create mode 100644 ruoyi-api/src/main/java/com/ruoyi/api/controller/MathMLController.java create mode 100644 ruoyi-api/src/main/java/com/ruoyi/api/controller/MathMLConverter.java create mode 100644 ruoyi-api/src/main/resources/MML2OMML.XSL create mode 100644 ruoyi-api/src/main/resources/OMML2MML.XSL create mode 100644 ruoyi-api/src/main/resources/OMML2MML1.XSL diff --git a/ruoyi-api/pom.xml b/ruoyi-api/pom.xml index d22a709..d9cb68e 100644 --- a/ruoyi-api/pom.xml +++ b/ruoyi-api/pom.xml @@ -31,6 +31,33 @@ + net.sf.saxon + Saxon-HE + 12.5 + + + org.apache.poi + poi + 5.2.5 + + + + + org.apache.poi + poi-ooxml + 5.2.5 + + + + + org.apache.poi + poi-ooxml-full + 5.2.5 + + + + + com.ruoyi ruoyi-common diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/controller/MathMLController.java b/ruoyi-api/src/main/java/com/ruoyi/api/controller/MathMLController.java new file mode 100644 index 0000000..a78d89f --- /dev/null +++ b/ruoyi-api/src/main/java/com/ruoyi/api/controller/MathMLController.java @@ -0,0 +1,175 @@ +package com.ruoyi.api.controller; + +import org.apache.xmlbeans.XmlCursor; +import org.apache.poi.openxml4j.opc.OPCPackage; +import org.apache.poi.xwpf.usermodel.*; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.parser.Parser; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.xwpf.usermodel.XWPFPictureData; + +import java.util.Base64; +import java.util.List; +import java.util.logging.Logger; + +@RestController +@RequestMapping("/api") +public class MathMLController { + + private static final Logger log = Logger.getLogger(MathMLController.class.getName()); + + @GetMapping("/getWordToHtml") + public String t1() { + String filePath = "C:\\D\\test.docx"; // ✅ 你的文件路径 + StringBuilder html = new StringBuilder(); + + // 添加 MathJax 支持 MathML 渲染 + + try (OPCPackage opc = OPCPackage.open(filePath); + XWPFDocument doc = new XWPFDocument(opc)) { + + List paragraphs = doc.getParagraphs(); + List tables = doc.getTables(); + + // 处理段落 + for (XWPFParagraph para : paragraphs) { + handleParagraph(para, html); + } + + // 处理表格(含公式) + for (XWPFTable table : tables) { + html.append(""); + for (XWPFTableRow row : table.getRows()) { + html.append(""); + for (XWPFTableCell cell : row.getTableCells()) { + html.append(""); + } + html.append(""); + } + html.append("
"); + for (XWPFParagraph cellPara : cell.getParagraphs()) { + handleParagraph(cellPara, html); + } + html.append("
"); + } + + } catch (Exception e) { + html.append("

").append(e.getMessage()).append("

"); + } + System.out.println(html.toString()); + return html.toString(); + } + private void handleParagraph(XWPFParagraph para, StringBuilder html) { + System.out.println("处理段落: " + para.getText()); + + CTP ctp = para.getCTP(); + XmlCursor cursor = ctp.newCursor(); + cursor.selectPath("./*"); + + StringBuilder paraHtml = new StringBuilder("

"); + + while (cursor.toNextSelection()) { + String nodeXml = cursor.xmlText(); + + if (nodeXml.contains(" 3) { + paraHtml.append("

"); + html.append(paraHtml); + } + } + + private void processRunXml(String xml, XWPFParagraph para, StringBuilder html) { + try { + // 使用 Jsoup 解析 XML + Document doc = Jsoup.parse(xml, "", Parser.xmlParser()); + Element wR = doc.child(0); + + // 查找 blip 标签中的 r:embed + Element blip = wR.selectFirst("a|blip"); + String relId = null; + if (blip != null) { + relId = blip.attr("r:embed"); + } + + // 如果没找到,尝试从其他标签找 r:embed + if ((relId == null || relId.isEmpty())) { + for (Element e : wR.select("[r|embed]")) { + relId = e.attr("r:embed"); + if (relId != null && !relId.isEmpty()) break; + } + } + + // 情况1:找到了 relId → 提取图片 + if (relId != null && !relId.isEmpty()) { + POIXMLDocumentPart imagePart = para.getDocument().getRelationById(relId); + if (imagePart instanceof XWPFPictureData) { + XWPFPictureData pictureData = (XWPFPictureData) imagePart; + byte[] imageData = pictureData.getData(); + + String ext; + int pictureType = pictureData.getPictureType(); + if (pictureType == XWPFDocument.PICTURE_TYPE_JPEG) { + ext = "jpeg"; + } else if (pictureType == XWPFDocument.PICTURE_TYPE_PNG) { + ext = "png"; + } else if (pictureType == XWPFDocument.PICTURE_TYPE_GIF) { + ext = "gif"; + } else if (pictureType == XWPFDocument.PICTURE_TYPE_BMP) { + ext = "bmp"; + } else { + ext = "png"; // 默认值 + } + + String base64 = Base64.getEncoder().encodeToString(imageData); + String imgUrl = "data:image/" + ext + ";base64," + base64; + html.append(""); + return; + } + } + + // 情况2:没有图片,提取文本 + String text = extractTextFromRunXml(xml); + if (text != null && !text.trim().isEmpty()) { + html.append(text); + } + + } catch (Exception e) { + e.printStackTrace(); + html.append("[图片解析错误]"); + } + } + + // 辅助方法:从 XML 中提取文本 + private String extractTextFromRunXml(String xml) { + try { + javax.xml.parsers.DocumentBuilder db = javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder(); + org.w3c.dom.Document doc = db.parse(new java.io.ByteArrayInputStream(xml.getBytes())); + org.w3c.dom.NodeList texts = doc.getElementsByTagName("w:t"); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < texts.getLength(); i++) { + sb.append(texts.item(i).getTextContent()); + } + return sb.toString(); + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } +} \ No newline at end of file diff --git a/ruoyi-api/src/main/java/com/ruoyi/api/controller/MathMLConverter.java b/ruoyi-api/src/main/java/com/ruoyi/api/controller/MathMLConverter.java new file mode 100644 index 0000000..621f7ad --- /dev/null +++ b/ruoyi-api/src/main/java/com/ruoyi/api/controller/MathMLConverter.java @@ -0,0 +1,100 @@ +package com.ruoyi.api.controller; + +import lombok.var; +import net.sf.saxon.s9api.*; + +import javax.xml.transform.*; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; +import java.io.InputStream; +import java.io.StringReader; +import java.io.StringWriter; + +public class MathMLConverter { + + private static final Processor processor = new Processor(false); + private static final XsltCompiler xsltCompiler = processor.newXsltCompiler(); // ✅ 正确类型 + + // 加载你已有的 OMML2MML.XSL + private static final XsltExecutable executable; + + static { + try (var xslStream = MathMLConverter.class.getResourceAsStream("/OMML2MML.XSL")) { + if (xslStream == null) { + throw new RuntimeException("❌ XSLT file '/OMML2MML.XSL' not found in resources!"); + } + executable = xsltCompiler.compile(new StreamSource(xslStream)); // ✅ 使用 xsltCompiler + } catch (Exception e) { + throw new ExceptionInInitializerError("❌ Failed to load XSLT: " + e.getMessage()); + } + } + + /** + * 将 OMML XML 字符串转换为 MathML + */ + public static String convertOmmlToMathML(String omml) { + try { + // 加载 XSL 文件 + InputStream xslStream = MathMLConverter.class.getClassLoader() + .getResourceAsStream("OMML2MML.XSL"); + if (xslStream == null) { + throw new RuntimeException("XSL 文件未找到,请检查路径:OMML2MML.XSL"); + } + + Source xslSource = new StreamSource(xslStream); + Transformer transformer = TransformerFactory.newInstance().newTransformer(xslSource); + + // 设置输出属性 + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); // ❌ 不要 XML 声明 + transformer.setOutputProperty(OutputKeys.INDENT, "no"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "0"); + + // 输入 OMML + Source source = new StreamSource(new StringReader(omml)); + + // 输出 + StringWriter stringWriter = new StringWriter(); + Result result = new StreamResult(stringWriter); + transformer.transform(source, result); + + String mathml = stringWriter.toString().trim(); + + // 🔧 清理和修复 MathML + mathml = cleanupMathML(mathml); + + return mathml; + + } catch (Exception e) { + e.printStackTrace(); + return "公式解析错误"; + } + } + + // 新增:清理 MathML 输出 + private static String cleanupMathML(String mathml) { + if (mathml == null || mathml.isEmpty()) { + return ""; + } + + // 1. 移除 XML 声明(如果还在) + mathml = mathml.replaceFirst("(?s)\\s*", ""); + + // 2. 替换 mml:math -> math,并修复命名空间 + mathml = mathml.replaceAll("mml:math", "math"); + mathml = mathml.replaceAll("xmlns:mml=\"http://www.w3.org/1998/Math/MathML\"", "xmlns=\"http://www.w3.org/1998/Math/MathML\""); + mathml = mathml.replaceAll("xmlns:m=\"[^\"]*\"", ""); // 移除 m: 命名空间 + + // 3. 移除多余的 mml: 前缀 + mathml = mathml.replaceAll("mml:([a-z])", "$1"); // mml:mi -> mi, mml:mo -> mo 等 + + // 4. 确保根元素是 + if (mathml.startsWith("" + mathml + ""; + } + + return mathml.trim(); + } +} \ No newline at end of file diff --git a/ruoyi-api/src/main/resources/MML2OMML.XSL b/ruoyi-api/src/main/resources/MML2OMML.XSL new file mode 100644 index 0000000..e2789e4 --- /dev/null +++ b/ruoyi-api/src/main/resources/MML2OMML.XSL @@ -0,0 +1,3822 @@ + + + + + + ABCDEFGHIJKLMNOPQRSTUVWXYZ + abcdefghijklmnopqrstuvwxyz + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + p + + + + + b + + + + + + + script + + + + + script + + + b + + + + + double-struck + + + p + + + + + fraktur + + + p + + + + + fraktur + + + b + + + + + sans-serif + + + p + + + + + sans-serif + + + b + + + + + sans-serif + + + + + sans-serif + + + bi + + + + + + + b + + + + + bi + + + + + + + + + + 1 + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + noBar + skw + bar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + on + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + 1 + 0 + + + + + 1 + 0 + + + + + 1 + 0 + + + + + 1 + 0 + + + + + 1 + 0 + + + + + 1 + 0 + + + + + 1 + 0 + + + + + 1 + 0 + + + + + + + + + + on + + + + + on + + + + + on + + + + + on + + + + + + on + + + + + on + + + + + on + + + + + on + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + off + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + lin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + 1 + 0 + + + + + + 1 + 0 + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + 1 + + 0 + + + + 0 + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + 1 + 0 + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + bot + top + + + top + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ̆ + + ̒ + + ̀ + + ̅ + + ̅ + + ̇ + + ̇ + + ̋ + + ́ + + ̃ + + ̃ + + ̈ + + ̌ + + ̂ + + ̅ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + top + bot + + + bot + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + " + + + + + + + + + + + + + + + + + + + " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + 1 + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + & + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + 1 + + 0 + + 1 + + + + + + + + + + + + + + + + off + + + + + on + + + + + on + + + + + on + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + undOvr + + + subSup + + + + + + + + 1 + 0 + 1 + 0 + + + + + + + + on + + + off + + + + + + + + + on + + + off + + + + + + + \ No newline at end of file diff --git a/ruoyi-api/src/main/resources/OMML2MML.XSL b/ruoyi-api/src/main/resources/OMML2MML.XSL new file mode 100644 index 0000000..509a76f --- /dev/null +++ b/ruoyi-api/src/main/resources/OMML2MML.XSL @@ -0,0 +1,2076 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ˘ + + ¸ + + ` + + - + + + + . + + ˙ + + ˝ + + ´ + + ~ + + ˜ + + ¨ + + ˇ + + ^ + + ¯ + + _ + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + left + + + right + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 0 + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0in + + + 0in + + + 0in + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + false + + + + + + + + + + + + + + + + + + + off + + + + + + + + + + + off + + + + + + + + + + + + + + off + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + 0pt + + + + right + + + left + + + + + right + + + left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + ¯ + + + + + + + + + + _ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + normal + + + + + + + + monospace + sans-serif-italic + bold-sans-serif + sans-serif-bold-italic + sans-serif + bold-fraktur + fraktur + double-struck + bold-script + script + bold + italic + normal + bold-italic + + + + + + bold + normal + + + + + normal + italic + + + + + + + + + + + + + + + + + + + + + + + + italic + + + bold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + box + + + + + + + + + + + + + + + + + left right top bottom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + -1 + + + + + + + + + + + + + 0 + 1 + + + + + + + + + + + + + 1 + 0 + + + + + + ( + + ) + + + diff --git a/ruoyi-api/src/main/resources/OMML2MML1.XSL b/ruoyi-api/src/main/resources/OMML2MML1.XSL new file mode 100644 index 0000000..b46ae33 --- /dev/null +++ b/ruoyi-api/src/main/resources/OMML2MML1.XSL @@ -0,0 +1,2068 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ˘ + + ¸ + + ` + + - + + + + . + + ˙ + + ˝ + + ´ + + ~ + + ˜ + + ¨ + + ˇ + + ^ + + ¯ + + _ + + + + + + + + + + + + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + left + + + right + + + + + + + + + + + + + + + + 0 + + + + + + + + + + 0 + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0in + + + 0in + + + 0in + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + false + + + + + + + + + + + + + + + + + + + off + + + + + + + + + + + off + + + + + + + + + + + + + + off + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + 0pt + + + + right + + + left + + + + + right + + + left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + ¯ + + + + + + + + + + _ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + normal + + + + + + + + monospace + sans-serif-italic + bold-sans-serif + sans-serif-bold-italic + sans-serif + bold-fraktur + fraktur + double-struck + bold-script + script + bold + italic + normal + bold-italic + + + + + + bold + normal + + + + + normal + italic + + + + + + + + + + + + + + + + + + + + + + + + italic + + + bold + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + box + + + + + + + + + + + + + + + + + left right top bottom + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + -1 + + + + + + + + + + + + + 0 + 1 + + + + + + + + + + + + + 1 + 0 + + +