Eksport równań matematycznych z prezentacji w Javie

Wprowadzenie

Aspose.Slides umożliwia eksportowanie równań matematycznych z prezentacji. Na przykład możesz potrzebować wyodrębnić równania matematyczne ze slajdów (z określonej prezentacji) i użyć ich w innym programie lub platformie.

Eksportowanie równań matematycznych do LaTeX

Aspose.Slides może konwertować równanie matematyczne PowerPoint bezpośrednio do LaTeX; nie jest wymagany pośredni plik MathML ani zewnętrzny konwerter. Równanie matematyczne jest przechowywane w ramce tekstowej jako IMathPortion. Użyj IMathPortion.getMathParagraph aby uzyskać IMathParagraph, a następnie wywołaj IMathParagraph.toLatex. Metoda zwraca ciąg znaków, który możesz zapisać, wyświetlić, wysłać do innej aplikacji lub dalej przetworzyć.

Poniższy przykład przegląda każdą ramkę tekstową na każdym slajdzie, znajduje wszystkie fragmenty matematyczne i zapisuje każde równanie do osobnego pliku .tex:

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 zwraca wszystkie ramki tekstowe znalezione na slajdzie. Sprawdzenie typu IMathPortion oddziela prawdziwe edytowalne równania od zwykłego tekstu i obrazów.

Silniki LaTeX i szablony dokumentów nie obsługują wszystkich poleceń, pakietów ani znaków Unicode. Przetestuj zwrócony ciąg znaków przy użyciu silnika LaTeX wykorzystywanego w Twojej aplikacji. Jeśli symbol lub element Office Math nie ma odpowiedniej reprezentacji w tym środowisku, zastąp go w zwróconym ciągu poleceniem specyficznym dla projektu lub pomiń równanie i zanotuj problem do weryfikacji.

Zapis równań matematycznych jako MathML

Choć ludzie łatwo zapisują kod niektórych formatów równań, takich jak LaTeX, mają trudności z ręcznym pisaniem kodu MathML, ponieważ jest on przeznaczony do automatycznego generowania przez aplikacje. Programy łatwo odczytują i parsują MathML, ponieważ jego kod jest w XML, więc MathML jest powszechnie używany jako format wyjściowy i drukarski w wielu dziedzinach.

Ten przykładowy kod pokazuje, jak wyeksportować równanie matematyczne z prezentacji do 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();
}

FAQ

Co dokładnie jest eksportowane do MathML – cały akapit czy pojedynczy blok formuły?
Możesz wyeksportować zarówno cały akapit matematyczny (MathParagraph), jak i pojedynczy blok (MathBlock) do MathML. Oba typy udostępniają metodę zapisu do MathML.

Jak rozpoznać, że obiekt na slajdzie jest formułą matematyczną, a nie zwykłym tekstem lub obrazem?
Formuła znajduje się w MathPortion i posiada MathParagraph. Obrazy oraz zwykłe fragmenty tekstowe bez MathParagraph nie są eksportowalnymi formułami.

Skąd pochodzi MathML w prezentacji – jest specyficzny dla PowerPointa czy jest standardem?
Eksport kieruje się do standardowego MathML (XML). Aspose używa Presentation MathML – podzbioru prezentacyjnego standardu, który jest szeroko stosowany w aplikacjach i w sieci.

Czy eksport formuł znajdujących się w tabelach, SmartArt, grupach itp. jest obsługiwany?
Tak, jeśli te obiekty zawierają fragmenty tekstowe z MathParagraph (czyli prawdziwe formuły PowerPoint), są eksportowane. Jeśli formuła jest osadzona jako obraz, nie jest.

Czy eksport do MathML modyfikuje oryginalną prezentację?
Nie. Zapis MathML to serializacja zawartości formuły; nie modyfikuje pliku prezentacji.