From 6fa3678595e8945f19b8aead4a78be11bd5975ea Mon Sep 17 00:00:00 2001 From: lijiarao Date: Thu, 25 Jan 2024 13:58:54 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E6=96=87=E6=A1=A3=E6=8B=86=E5=88=86--?= =?UTF-8?q?=E5=85=AC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- laws-modules/pom.xml | 4 +- .../split/service/impl/FileSpiltService.java | 39 ++++----- .../jero/modules/split/util/ImageParse.java | 19 +++-- .../jero/modules/split/util/OmmlUtils.java | 84 +++++++++++++++++-- .../jero/modules/split/util/W3cNodeUtil.java | 18 ---- 5 files changed, 114 insertions(+), 50 deletions(-) diff --git a/laws-modules/pom.xml b/laws-modules/pom.xml index adc703c1..95abc783 100644 --- a/laws-modules/pom.xml +++ b/laws-modules/pom.xml @@ -165,10 +165,10 @@ jeuclid-core 3.1.9 - + \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java b/laws-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java index e072b07b..10e24147 100644 --- a/laws-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java +++ b/laws-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java @@ -26,6 +26,7 @@ import org.apache.shiro.SecurityUtils; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlObject; import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObject; +import org.openxmlformats.schemas.drawingml.x2006.main.CTOfficeArtExtension; import org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture; import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTAnchor; import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline; @@ -154,17 +155,17 @@ public class FileSpiltService { ZipSecureFile.setMinInflateRatio(-1.0d); XWPFDocument doc = new XWPFDocument(is); // 获取文档中的图片 - //List allPictures = doc.getAllPictures(); - //// 遍历图片并处理数学公式 - //for (XWPFPictureData pictureData : allPictures) { - // String contentType = pictureData.getPackagePart().getContentType(); - // System.out.println(contentType); - // // 判断图片类型是否为数学公式 - // if (contentType.equals(PictureType.EMF.getExtension())) { - // // 处理数学公式,你可以在这里添加自己的逻辑 - // System.out.println("Found a math equation!"); - // } - //} + List allPictures = doc.getAllPictures(); + // 遍历图片并处理数学公式 + for (XWPFPictureData pictureData : allPictures) { + String contentType = pictureData.getPackagePart().getContentType(); + System.out.println(contentType); + // 判断图片类型是否为数学公式 + if (contentType.equals(PictureType.EMF.getExtension())) { + // 处理数学公式,你可以在这里添加自己的逻辑 + System.out.println("Found a math equation!"); + } + } //获得序号标题和无标题序号 TitleNumberVO titleNumberVO = AsposeUtil.getNumber(is1); //TitleNumberVO titleNumberVO = new TitleNumberVO(); @@ -200,16 +201,16 @@ public class FileSpiltService { CTOMath ctoMath = (CTOMath) child; //stringBuilder.append(ctoMath.xmlText()); // 处理word中存在的公式成mathML格式 - String imageName = OmmlUtils.convertOmathToPng(ctoMath.xmlText()); - if (messageList.size() > 0) { - addItermsMathImage(messageList.get(messageList.size() - 1), itemValList, imageName); - } + //String imageName = OmmlUtils.convertOmathToPng(ctoMath.xmlText()); + //if (messageList.size() > 0) { + // addItermsMathImage(messageList.get(messageList.size() - 1), itemValList, imageName); + //} } else if (child instanceof CTOMathPara) { CTOMathPara ctoMathPara = (CTOMathPara) child; - String imageName = OmmlUtils.convertOmathToPng(ctoMathPara.xmlText()); - if (messageList.size() > 0) { - addItermsMathImage(messageList.get(messageList.size() - 1), itemValList, imageName); - } + //String imageName = OmmlUtils.convertOmathToPng(ctoMathPara.xmlText()); + //if (messageList.size() > 0) { + // addItermsMathImage(messageList.get(messageList.size() - 1), itemValList, imageName); + //} } } diff --git a/laws-modules/src/main/java/com/jero/modules/split/util/ImageParse.java b/laws-modules/src/main/java/com/jero/modules/split/util/ImageParse.java index 93951ad0..3457ef17 100644 --- a/laws-modules/src/main/java/com/jero/modules/split/util/ImageParse.java +++ b/laws-modules/src/main/java/com/jero/modules/split/util/ImageParse.java @@ -23,13 +23,8 @@ public class ImageParse { super(); // this.targetDir = targetDir; } - public String parse(byte[] data, String extName) { - String imageName = UUIDUtils.randomUUID10() + extName; - - String filepathandname = filePathCos + "/" + imageName; - MinioUtil.uploadByte(data, filepathandname); - return imageName; + return parse(new ByteArrayInputStream(data), extName); } public String parse(InputStream in, String extName) { @@ -50,5 +45,17 @@ public class ImageParse { return filename; } + //public String parse(byte[] data, String extName) { + // String imageName = UUIDUtils.randomUUID10() + extName; + // + // String filepathandname = filePathCos + "/" + imageName; + // MinioUtil.uploadByte(data, filepathandname); + // return imageName; + //} + + + + + } diff --git a/laws-modules/src/main/java/com/jero/modules/split/util/OmmlUtils.java b/laws-modules/src/main/java/com/jero/modules/split/util/OmmlUtils.java index 4817c8c7..8dc9036b 100644 --- a/laws-modules/src/main/java/com/jero/modules/split/util/OmmlUtils.java +++ b/laws-modules/src/main/java/com/jero/modules/split/util/OmmlUtils.java @@ -3,6 +3,7 @@ package com.jero.modules.split.util; import net.sourceforge.jeuclid.context.LayoutContextImpl; import net.sourceforge.jeuclid.context.Parameter; import net.sourceforge.jeuclid.converter.Converter; +import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -18,16 +19,27 @@ import java.net.URL; */ public class OmmlUtils { - public static String convertOmathToPng(String oriMathXmlStr) { - ImageParse imageParser = new ImageParse(); + public static void main(String[] args) throws XmlException, UnsupportedEncodingException { + String oriMathXmlStr = "fx=a0+n=1ancosnπxL+bnsinnπxL"; + //oriMathXmlStr = new String(oriMathXmlStr.getBytes("gbk"), "utf-8"); + File file = OmmlUtils.convertOmathToPng(oriMathXmlStr); + System.out.printf(file.getName()); + } + + public static File convertOmathToPng(String oriMathXmlStr) { Document document = null; try { - System.out.println("oriMathXmlStrxxxxxxxxxxxxxxxxxxxxxxx : " + oriMathXmlStr); XmlObject xmlObject = XmlObject.Factory.parse(oriMathXmlStr); + ImageParse imageParser = new ImageParse(); String mathMLStr = getMathMLFromNode(xmlObject.getDomNode()); System.out.println("xxxxxxxxxxxxxxxxxxxxxxx : " + mathMLStr); document = W3cNodeUtil.xmlStr2Node(mathMLStr, "utf-16"); - return documentToImageHTML(document, imageParser); + String imageName = documentToImageHTML(document, imageParser); + if (imageName != null) { + File tf = new File(imageName); + System.out.println("图片是否存在 ======== " + tf.exists() + "Name : " + tf.getName()); + return tf; + } } catch (Exception e) { e.printStackTrace(); } @@ -55,7 +67,6 @@ public class OmmlUtils { } StreamSource streamSource = new StreamSource(xslFile); String s = W3cNodeUtil.node2XmlStr(node); - //String s = "fx=a0+n=1ancosnπxL+bnsinnπxL"; String mathML = W3cNodeUtil.xml2Xml(s, streamSource); if (mathML != null) { mathML = mathML.replaceAll("xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\"", ""); @@ -81,5 +92,68 @@ public class OmmlUtils { return null; } + //public static String convertOmathToPng(String oriMathXmlStr) { + // ImageParse imageParser = new ImageParse(); + // Document document = null; + // try { + // System.out.println("oriMathXmlStrxxxxxxxxxxxxxxxxxxxxxxx : " + oriMathXmlStr); + // XmlObject xmlObject = XmlObject.Factory.parse(oriMathXmlStr); + // String mathMLStr = getMathMLFromNode(xmlObject.getDomNode()); + // System.out.println("xxxxxxxxxxxxxxxxxxxxxxx : " + mathMLStr); + // document = W3cNodeUtil.xmlStr2Node(mathMLStr, "utf-16"); + // return documentToImageHTML(document, imageParser); + // } catch (Exception e) { + // e.printStackTrace(); + // } + // return null; + //} + // + ///** + // * 直接转node有等号会出问题,先转成xml的string,再转成mathML的字符串 + // * + // * @param node + // * @return + // * @throws IOException + // * @throws TransformerException + // */ + //private static String getMathMLFromNode(Node node) throws IOException, TransformerException { + // ClassLoader classLoader = OmmlUtils.class.getClassLoader(); + // URL url = classLoader.getResource("xsl/OMML2MML.XSL"); + // File xslFile = null; + // if (url != null) { + // try { + // xslFile = new File(url.toURI()); + // } catch (Exception e) { + // e.printStackTrace(); + // } + // } + // StreamSource streamSource = new StreamSource(xslFile); + // String s = W3cNodeUtil.node2XmlStr(node); + // //String s = "fx=a0+n=1ancosnπxL+bnsinnπxL"; + // String mathML = W3cNodeUtil.xml2Xml(s, streamSource); + // if (mathML != null) { + // mathML = mathML.replaceAll("xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\"", ""); + // mathML = mathML.replaceAll("xmlns:mml", "xmlns"); + // mathML = mathML.replaceAll("mml:", ""); + // } + // return mathML; + //} + // + //private static String documentToImageHTML(Document document, ImageParse imageParser) { + // try { + // Converter mathMLConvert = Converter.getInstance(); + // LayoutContextImpl localLayoutContextImpl = new LayoutContextImpl(LayoutContextImpl.getDefaultLayoutContext()); + // localLayoutContextImpl.setParameter(Parameter.MATHSIZE, 50); + // ByteArrayOutputStream os = new ByteArrayOutputStream(); + // mathMLConvert.convert(document, os, "image/png", localLayoutContextImpl); + // String pngName = imageParser.parse(os.toByteArray(), ".png"); + // os.close(); + // return pngName; + // } catch (Exception e) { + // e.printStackTrace(); + // } + // return null; + //} + } diff --git a/laws-modules/src/main/java/com/jero/modules/split/util/W3cNodeUtil.java b/laws-modules/src/main/java/com/jero/modules/split/util/W3cNodeUtil.java index 664bb512..cdea5c11 100644 --- a/laws-modules/src/main/java/com/jero/modules/split/util/W3cNodeUtil.java +++ b/laws-modules/src/main/java/com/jero/modules/split/util/W3cNodeUtil.java @@ -17,13 +17,6 @@ import java.io.*; public class W3cNodeUtil { - public static void main(String[] args) throws XmlException, UnsupportedEncodingException { - String oriMathXmlStr = "fx=a0+n=1ancosnπxL+bnsinnπxL"; - //oriMathXmlStr = new String(oriMathXmlStr.getBytes("gbk"), "utf-8"); - String s = OmmlUtils.convertOmathToPng(oriMathXmlStr); - System.out.printf(s); - } - public static String node2XmlStr(Node node) { Transformer transformer = null; if (node == null) { @@ -105,16 +98,5 @@ public class W3cNodeUtil { return null; } - public static Node getChildChainNode(Node node, String... nodeName) { - Node childNode = node; - for (int i = 0; i < nodeName.length; i++) { - String tmp = nodeName[i]; - childNode = getChildNode(childNode, tmp); - if (childNode == null) { - return null; - } - } - return childNode; - } }