Matematikai egyenletek exportálása prezentációkból Java-ban

Bevezetés

Az Aspose.Slides lehetővé teszi a matematikai egyenletek exportálását a prezentációkból. Például előfordulhat, hogy ki szeretné nyerni a diák (egy adott prezentációból) matematikai egyenleteit, és egy másik programban vagy platformon használja őket.

Matematikai egyenletek exportálása LaTeX‑be

Az Aspose.Slides közvetlenül képes egy PowerPoint matematikai egyenletet LaTeX‑be konvertálni; köztes MathML‑fájlra vagy külső konverterre nincs szükség. A matematikai egyenlet egy szövegkeretben van tárolva, mint egy IMathPortion. Használja az IMathPortion.getMathParagraph metódust az IMathParagraph lekéréséhez, majd hívja az IMathParagraph.toLatex metódust. A metódus egy karakterláncot ad vissza, amelyet menthet, megjeleníthet, továbbíthat egy másik alkalmazásnak, vagy további feldolgozásra használhat.

Az alábbi példa minden szövegkeretet vizsgál minden dián, megtalálja az összes matematikai részt, és minden egyenletet egy külön .tex fájlba ír:

Presentation presentation = new Presentation("equations.pptx");
try {
    int slideCount = presentation.getSlides().size();
    for (int slideIndex = 0; slideIndex < slideCount; slideIndex++) {
        ISlide slide = presentation.getSlides().get_Item(slideIndex);
        int slideNumber = slideIndex + 1;
        int equationNumber = 1;
        ITextFrame[] textFrames = SlideUtil.getAllTextBoxes(slide);

        for (ITextFrame textFrame : textFrames) {
            for (IParagraph paragraph : textFrame.getParagraphs()) {
                for (IPortion portion : paragraph.getPortions()) {
                    if (!(portion instanceof IMathPortion))
                        continue;

                    IMathPortion mathPortion = (IMathPortion) portion;
                    IMathParagraph mathParagraph = mathPortion.getMathParagraph();
                    String latexFileName = "slide_" + slideNumber + "_equation_" + equationNumber + ".tex";

                    String latexText = mathParagraph.toLatex();
                    Path latexPath = Paths.get(latexFileName);
                    byte[] latexBytes = latexText.getBytes(StandardCharsets.UTF_8);
                    Files.write(latexPath, latexBytes);
                    equationNumber++;
                }
            }
        }
    }
} finally {
    presentation.dispose();
}

SlideUtil.getAllTextBoxes visszaadja az egy dián található összes szövegkeretet. Az IMathPortion típusellenőrzés megkülönbözteti az igazi szerkeszthető egyenleteket a szokásos szövegtől és képektől.

A LaTeX‑motorok és a dokumentumsablonok nem mind támogatják ugyanazokat a parancsokat, csomagokat vagy Unicode karaktereket. Tesztelje a visszaadott karakterláncot az alkalmazása által használt LaTeX‑motorral. Ha egy szimbólumnak vagy Office Math elemnek nincs megfelelő ábrázolása az adott környezetben, cserélje ki a visszaadott karakterláncban egy projektspecifikus paranccsal, vagy hagyja ki az egyenletet, és rögzítse a problémát felülvizsgálatra.

Matematikai egyenletek mentése MathML‑ként

Míg az emberek könnyen megírják egyes egyenletformátumok, például a LaTeX kódját, a MathML kódjának megírása nehezebb, mivel azt alkalmazásoknak automatikusan kell generálniuk. A programok könnyen olvassák és elemzik a MathML‑t, mivel annak kódja XML, ezért a MathML gyakran használt kimeneti és nyomtatási formátum sok területen.

Ez a példakód megmutatja, hogyan exportálhat egy matematikai egyenletet egy prezentációból MathML‑be:

Presentation pres = new Presentation();
try {
    IAutoShape autoShape = pres.getSlides().get_Item(0).getShapes().addMathShape(0, 0, 500, 50);
    IMathParagraph mathParagraph = ((MathPortion)autoShape.getTextFrame().getParagraphs().get_Item(0).
            getPortions().get_Item(0)).getMathParagraph();

    mathParagraph.add(new MathematicalText("a").
            setSuperscript("2").
            join("+").
            join(new MathematicalText("b").setSuperscript("2")).
            join("=").
            join(new MathematicalText("c").setSuperscript("2")));

    FileOutputStream stream = new FileOutputStream("mathml.xml");
    mathParagraph.writeAsMathMl(stream);
} catch (IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

GYIK

Mi exportálódik pontosan MathML‑be – egy bekezdés vagy egy egyéni képletblokk?
Exportálhat akár egy teljes matematikai bekezdést (MathParagraph) vagy egy egyedi blokkot (MathBlock) MathML‑be. Mindkét típus rendelkezik egy metódussal, amely MathML‑be ír.

Hogyan deríthetem ki, hogy egy dián lévő objektum matematikai képlet-e, és nem egyszerű szöveg vagy kép?
A képlet egy MathPortion‑ben található, és rendelkezik egy MathParagraph‑vel. A képek és a szokásos szövegrészek, amelyeknek nincs MathParagraph, nem exportálható képletek.

Honnan származik a MathML egy prezentációban – PowerPoint‑specifikus vagy szabvány?
Az export a szabványos MathML‑re (XML) irányul. Az Aspose a Presentation MathML‑t használja – a szabvány prezentáció részhalmazát –, amely széles körben elterjedt az alkalmazások és a web között.

Támogatott-e a képletek exportálása táblázatokon, SmartArt‑on, csoportokon stb. belül?
Igen, ha ezek az objektumok olyan szövegrészeket tartalmaznak, amelyeknek van [MathParagraph] (azaz valódi PowerPoint képletek), akkor exportálódnak. Ha egy képlet képként van beágyazva, nem.

Módosítja a MathML‑be exportálás az eredeti prezentációt?
Nem. A MathML írása a képlet tartalmának sorosítása; nem módosítja a prezentáció fájlt.