Exportera matematiska ekvationer från presentationer i Java

Introduktion

Aspose.Slides låter dig exportera matematiska ekvationer från presentationer. Till exempel kan du behöva extrahera de matematiska ekvationerna på bildspel (från en specifik presentation) och använda dem i ett annat program eller en annan plattform.

Exportera matematiska ekvationer till LaTeX

Aspose.Slides kan konvertera en PowerPoint‑matematikekvation direkt till LaTeX; en mellanliggande MathML‑fil och en extern konverterare krävs inte. En matematikekvation lagras i en textram som ett IMathPortion. Använd IMathPortion.getMathParagraph för att hämta ett IMathParagraph, och anropa sedan IMathParagraph.toLatex. Metoden returnerar en sträng som du kan spara, visa, skicka till ett annat program eller bearbeta vidare.

Följande exempel granskar varje textram på varje bild, hittar alla matematikdelar och skriver varje ekvation till en separat .tex‑fil:

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 returnerar alla textram som hittas på en bild. Typkontrollen för IMathPortion separerar äkta redigerbara ekvationer från vanlig text och bilder.

LaTeX‑motorer och dokumentmallar stödjer inte alla samma kommandon, paket eller Unicode‑tecken. Testa den returnerade strängen med den LaTeX‑motor som används av din applikation. Om en symbol eller Office Math‑element inte har någon lämplig representation i den miljön, ersätt den i den returnerade strängen med ett projektspecifikt kommando eller hoppa över ekvationen och registrera problemet för granskning.

Spara matematiska ekvationer som MathML

Medan människor lätt kan skriva koden för vissa ekvationsformat som LaTeX, har de svårigheter att skriva koden för MathML eftersom det senare är avsett att genereras automatiskt av program. Program läser och analyserar MathML enkelt eftersom dess kod är i XML, så MathML används ofta som ett utskrifts‑ och utskriftsformat i många områden.

Den här exempelkoden visar hur du exporterar en matematikekvation från en presentation till MathML:

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();
}

Vanliga frågor

Vad exporteras exakt till MathML – ett stycke eller ett enskilt formelblock?
Du kan exportera antingen ett helt matematiskt stycke (MathParagraph) eller ett enskilt block (MathBlock) till MathML. Båda typerna tillhandahåller en metod för att skriva till MathML.

Hur kan jag avgöra att ett objekt på en bild är en matematisk formel snarare än vanlig text eller en bild?
En formel finns i en MathPortion och har ett MathParagraph. Bilder och vanliga textdelar utan ett MathParagraph är inte exportbara formler.

Varifrån kommer MathML i en presentation – är det PowerPoint‑specifikt eller en standard?
Exporten riktar sig mot standard‑MathML (XML). Aspose använder Presentation MathML – presentationsdelmängden av standarden – som är allmänt använd i många applikationer och på webben.

Stöds export av formler inuti tabeller, SmartArt, grupper osv.?
Ja, om dessa objekt innehåller textdelar med ett MathParagraph (dvs. äkta PowerPoint‑formler) exporteras de. Om en formel är inbäddad som en bild sker ingen export.

Modifierar export till MathML den ursprungliga presentationen?
Nej. Att skriva MathML är en serialisering av formelns innehåll; det ändrar inte presentationsfilen.