Εξαγωγή μαθηματικών εξισώσεων από παρουσιάσεις στο Android

Εισαγωγή

Το Aspose.Slides for Android μέσω Java σάς επιτρέπει να εξάγετε μαθηματικές εξισώσεις από παρουσιάσεις. Για παράδειγμα, μπορεί να χρειαστεί να εξάγετε τις μαθηματικές εξισώσεις στις διαφάνειες (από μια συγκεκριμένη παρουσίαση) και να τις χρησιμοποιήσετε σε άλλο πρόγραμμα ή πλατφόρμα.

Εξαγωγή Μαθηματικών Εξισώσεων σε LaTeX

Το Aspose.Slides μπορεί να μετατρέψει μια εξίσωση PowerPoint απευθείας σε LaTeX· δεν απαιτείται ενδιάμεσο αρχείο MathML ή εξωτερικός μετατροπέας. Μια μαθηματική εξίσωση αποθηκεύεται σε πλαίσιο κειμένου ως ένα IMathPortion. Χρησιμοποιήστε IMathPortion.getMathParagraph για να λάβετε ένα IMathParagraph, και έπειτα καλέστε IMathParagraph.toLatex. Η μέθοδος επιστρέφει μια συμβολοσειρά που μπορείτε να αποθηκεύσετε, εμφανίσετε, στείλετε σε άλλη εφαρμογή ή να επεξεργαστείτε περαιτέρω.

Το παρακάτω παράδειγμα εξετάζει κάθε πλαίσιο κειμένου σε κάθε διαφάνεια, εντοπίζει όλες τις μαθηματικές περιοχές και γράφει κάθε εξίσωση σε ξεχωριστό αρχείο .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();
                    File latexFile = new File(latexFileName);
                    byte[] latexBytes = latexText.getBytes(StandardCharsets.UTF_8);
                    FileOutputStream outputStream = new FileOutputStream(latexFile);
                    try {
                        outputStream.write(latexBytes);
                    } finally {
                        outputStream.close();
                    }
                    equationNumber++;
                }
            }
        }
    }
} finally {
    presentation.dispose();
}

SlideUtil.getAllTextBoxes επιστρέφει όλα τα πλαίσια κειμένου που βρέθηκαν σε μια διαφάνεια. Ο έλεγχος τύπου IMathPortion διαχωρίζει τις πραγματικές επεξεργάσιμες εξισώσεις από το απλό κείμενο και τις εικόνες.

Οι μηχανές LaTeX και τα πρότυπα εγγράφων δεν υποστηρίζουν όλες τις εντολές, τα πακέτα ή τους χαρακτήρες Unicode με τον ίδιο τρόπο. Δοκιμάστε τη συμβολοσειρά που επιστρέφεται με τη μηχανή LaTeX που χρησιμοποιεί η εφαρμογή σας. Εάν ένα σύμβολο ή στοιχείο Office Math δεν έχει κατάλληλη αναπαράσταση στο περιβάλλον αυτό, αντικαταστήστε το στη συμβολοσειρά με μια εντολή ειδική για το έργο σας ή παραλείψτε την εξίσωση και καταγράψτε το ζήτημα για μελλοντική επανεξέταση.

Αποθήκευση Μαθηματικών Εξισώσεων ως MathML

Ενώ οι άνθρωποι γράφουν εύκολα τον κώδικα για κάποιες μορφές εξισώσεων όπως το LaTeX, δυσκολεύονται να γράψουν τον κώδικα για το MathML επειδή το δεύτερο προορίζεται για αυτόματη δημιουργία από εφαρμογές. Τα προγράμματα διαβάζουν και αναλύουν το MathML εύκολα επειδή ο κώδικάς του είναι σε XML, γι’ αυτό το MathML χρησιμοποιείται συχνά ως μορφή εξόδου και εκτύπωσης σε πολλούς τομείς.

Αυτό το δείγμα κώδικα δείχνει πώς να εξάγετε μια μαθηματική εξίσωση από παρουσίαση σε 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();
}

Συχνές Ερωτήσεις

Τι ακριβώς εξάγεται σε MathML—μια παράγραφος ή ένα μεμονωμένο μπλοκ τύπου;

Μπορείτε να εξάγετε είτε ολόκληρη μαθηματική παράγραφο (MathParagraph) είτε ένα μεμονωμένο μπλοκ (MathBlock) σε MathML. Και οι δύο τύποι παρέχουν μέθοδο εγγραφής σε MathML.

Πώς μπορώ να διακρίνω ότι ένα αντικείμενο σε μια διαφάνεια είναι μαθηματικός τύπος και όχι απλό κείμενο ή εικόνα;

Ένας τύπος βρίσκεται σε ένα MathPortion και έχει ένα MathParagraph. Εικόνες και απλά τμήματα κειμένου χωρίς MathParagraph δεν είναι εξαγώγιμοι τύποι.

Από πού προέρχεται το MathML σε μια παρουσίαση—είναι ειδικό για PowerPoint ή πρότυπο;

Η εξαγωγή στοχεύει στο πρότυπο MathML (XML). Το Aspose χρησιμοποιεί Presentation MathML—το υποσύνολο παρουσίασης του προτύπου—που χρησιμοποιείται ευρέως σε εφαρμογές και στο διαδίκτυο.

Υποστηρίζεται η εξαγωγή τύπων μέσα σε πίνακες, SmartArt, ομάδες κ.λπ.;

Ναι, εάν αυτά τα αντικείμενα περιέχουν τμήματα κειμένου με MathParagraph (δηλαδή πραγματικούς τύπους PowerPoint), εξάγονται. Εάν ένας τύπος είναι ενσωματωμένος ως εικόνα, δεν εξάγεται.

Τροποποιεί η εξαγωγή σε MathML την αρχική παρουσίαση;

Όχι. Η εγγραφή MathML είναι μια σειριοποίηση του περιεχομένου του τύπου· δεν τροποποιεί το αρχείο παρουσίασης.