Διαχείριση Σχημάτων Παρουσίασης σε C++

Επισκόπηση

Αυτό το άρθρο εξηγεί πώς να εργάζεστε με σχήματα σε παρουσιάσεις χρησιμοποιώντας το Aspose.Slides. Δείχνει πώς να βρείτε ένα σχήμα σε μια διαφάνεια, να το κλωνοποιήσετε, να το αφαιρέσετε, να το κρύψετε, να αλλάξετε τη σειρά του, να λάβετε το Interop Shape ID του και να ορίσετε εναλλακτικό κείμενο για ταυτοποίηση και περαιτέρω επεξεργασία.

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

Find a Shape on a Slide

Αυτό το θέμα περιγράφει μια απλή τεχνική που διευκολύνει τους προγραμματιστές να βρουν ένα συγκεκριμένο σχήμα σε μια διαφάνεια χωρίς τη χρήση του εσωτερικού του Id. Είναι σημαντικό να γνωρίζουμε ότι τα αρχεία PowerPoint Presentation δεν διαθέτουν κανέναν τρόπο να ταυτοποιήσουν σχήματα σε μια διαφάνεια εκτός από ένα εσωτερικό μοναδικό Id. Φαίνεται δύσκολο για τους προγραμματιστές να βρουν ένα σχήμα χρησιμοποιώντας το εσωτερικό του μοναδικό Id. Όλα τα σχήματα που προστίθενται στις διαφάνειες έχουν κάποιο Alt Text. Προτείνουμε στους προγραμματιστές να χρησιμοποιούν εναλλακτικό κείμενο για την εύρεση ενός συγκεκριμένου σχήματος. Μπορείτε να χρησιμοποιήσετε το MS PowerPoint για να ορίσετε το εναλλακτικό κείμενο για αντικείμενα που σκοπεύετε να αλλάξετε στο μέλλον.

Αφού ορίσετε το εναλλακτικό κείμενο του οποιουδήποτε επιθυμητού σχήματος, μπορείτε στη συνέχεια να ανοίξετε αυτήν την παρουσίαση χρησιμοποιώντας το Aspose.Slides for C++ και να επαναλάβετε όλα τα σχήματα που προστέθηκαν σε μια διαφάνεια. Κατά τη διάρκεια κάθε επανάληψης, μπορείτε να ελέγξετε το εναλλακτικό κείμενο του σχήματος και το σχήμα με το αντίστοιχο εναλλακτικό κείμενο θα είναι το σχήμα που χρειάζεστε. Για να επιδείξουμε αυτήν την τεχνική με καλύτερο τρόπο, δημιουργήσαμε μια μέθοδο, FindShape που κάνει την εύρεση συγκεκριμένου σχήματος σε μια διαφάνεια και στη συνέχεια επιστρέφει απλά αυτό το σχήμα.

Clone a Shape

Για να κλωνοποιήσετε ένα σχήμα σε μια διαφάνεια χρησιμοποιώντας το Aspose.Slides for C++:

  1. Δημιουργήστε μια παρουσία της κλάσης Presentation.
  2. Αποκτήστε την αναφορά μιας διαφάνειας χρησιμοποιώντας το δείκτη της.
  3. Πρόσβαση στη συλλογή σ shapes της πηγής διαφάνειας.
  4. Προσθήκη μιας νέας διαφάνειας στην παρουσία.
  5. Κλωνοποίηση σ shapes από τη συλλογή σ shapes της πηγής διαφάνειας στη νέα διαφάνεια.
  6. Αποθήκευση της τροποποιημένης παρουσίασης ως αρχείο PPTX.

Το παρακάτω παράδειγμα προσθέτει ένα group shape σε μια διαφάνεια.

Remove a Shape

Το Aspose.Slides for C++ επιτρέπει στους προγραμματιστές να αφαιρέσουν οποιοδήποτε σχήμα. Για να αφαιρέσετε το σχήμα από οποιαδήποτε διαφάνεια, ακολουθήστε τα παρακάτω βήματα:

  1. Δημιουργήστε μια παρουσία της κλάσης Presentation.
  2. Πρόσβαση στην πρώτη διαφάνεια.
  3. Βρείτε το σχήμα με συγκεκριμένο AlternativeText.
  4. Αφαιρέστε το σχήμα.
  5. Αποθηκεύστε το αρχείο στον δίσκο.

Hide a Shape

Το Aspose.Slides for C++ επιτρέπει στους προγραμματιστές να κρύψουν οποιοδήποτε σχήμα. Για να κρύψετε το σχήμα από οποιαδήποτε διαφάνεια, ακολουθήστε τα παρακάτω βήματα:

  1. Δημιουργήστε μια παρουσία της κλάσης Presentation.
  2. Πρόσβαση στην πρώτη διαφάνεια.
  3. Βρείτε το σχήμα με συγκεκριμένο AlternativeText.
  4. Κρύψτε το σχήμα.
  5. Αποθηκεύστε το αρχείο στον δίσκο.

Change Shape Order

Το Aspose.Slides for C++ επιτρέπει στους προγραμματιστές να αλλάξουν τη σειρά των σχημάτων. Η αλλαγή σειράς καθορίζει ποιο σχήμα είναι μπροστά ή ποιο είναι στο παρασκήνιο. Για να αλλάξετε τη σειρά ενός σχήματος σε οποιαδήποτε διαφάνεια, ακολουθήστε τα παρακάτω βήματα:

  1. Δημιουργήστε μια παρουσία της κλάσης Presentation.
  2. Πρόσβαση στην πρώτη διαφάνεια.
  3. Προσθέστε ένα σχήμα.
  4. Προσθέστε κάποιο κείμενο στο πλαίσιο κειμένου του σχήματος.
  5. Προσθέστε ένα άλλο σχήμα με τις ίδιες συντεταγμένες.
  6. Αλλάξτε τη σειρά των σχημάτων.
  7. Αποθηκεύστε το αρχείο στον δίσκο.

Get the Interop Shape ID

Το Aspose.Slides for C++ επιτρέπει στους προγραμματιστές να λάβουν ένα μοναδικό αναγνωριστικό σχήματος σε επίπεδο διαφάνειας, σε αντίθεση με την ιδιότητα UniqueId, η οποία παρέχει μοναδικό αναγνωριστικό σε επίπεδο παρουσίασης. Η ιδιότητα OfficeInteropShapeId προστέθηκε στις διεπαφές IShape και στην κλάση Shape. Η τιμή που επιστρέφει η ιδιότητα OfficeInteropShapeId αντιστοιχεί στην τιμή του Id του αντικειμένου Microsoft.Office.Interop.PowerPoint.Shape. Παρακάτω δίνεται το δείγμα κώδικα.

Set the AlternativeText Property

Το Aspose.Slides for C++ επιτρέπει στους προγραμματιστές να ορίσουν το AlternativeText οποιουδήποτε σχήματος. Για να ορίσετε το AlternativeText ενός σχήματος, ακολουθήστε τα παρακάτω βήματα:

  1. Δημιουργήστε μια παρουσία της κλάσης Presentation.
  2. Πρόσβαση στην πρώτη διαφάνεια.
  3. Προσθέστε οποιοδήποτε σχήμα στη διαφάνεια.
  4. Εργαστείτε με το νεοπροστέθεισες σχήμα.
  5. Περιηγηθείτε στα σχήματα για να βρείτε ένα σχήμα.
  6. Ορίστε το AlternativeText.
  7. Αποθηκεύστε το αρχείο στον δίσκο.

Access Layout Formats for a Shape

Το Aspose.Slides for C++ επιτρέπει στους προγραμματιστές να έχουν πρόσβαση στις διαμορφώσεις διάταξης για ένα σχήμα. Αυτό το άρθρο δείχνει πώς μπορείτε να προσπελάσετε τις ιδιότητες FillFormat και LineFormat ενός σχήματος.

Παρακάτω δίνεται το δείγμα κώδικα.

Render a Shape as SVG

Τώρα το Aspose.Slides for C++ υποστηρίζει την απόδοση ενός σχήματος ως svg. Η μέθοδος WriteAsSvg (και η υπερφόρτωσή της) προστέθηκε στην κλάση Shape και στην διεπαφή IShape. Αυτή η μέθοδος επιτρέπει την αποθήκευση του περιεχομένου του σχήματος ως αρχείο SVG. Το παρακάτω απόσπασμα κώδικα δείχνει πώς να εξάγετε το σχήμα μιας διαφάνειας σε αρχείο SVG.

String outSvgFileName = u"SingleShape.svg";

auto pres = System::MakeObject<Presentation>(u"TestExportShapeToSvg.pptx");

auto stream = System::MakeObject<FileStream>(outSvgFileName, FileMode::Create, FileAccess::Write);
pres->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0)->WriteAsSvg(stream);

Shapes Alignment

Το Aspose.Slides επιτρέπει στοίχιση σχημάτων είτε σχετικά με τα περιθώρια της διαφάνειας είτε μεταξύ τους. Για το σκοπό αυτό, προστέθηκε μια υπερφορτωμένη μέθοδος SlidesUtil.AlignShapes(). Η απαρίθμηση ShapesAlignmentType ορίζει τις πιθανές επιλογές στοίχισης.

Example 1

Ο παρακάτω κώδικας ευθυγραμμίζει σχήματα με δείκτες 1, 2 και 4 κατά το επάνω άκρο της διαφάνειας.

SharedPtr<Presentation> pres = System::MakeObject<Presentation>(u"example.pptx");

SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);
SharedPtr<IShape> shape1 = slide->get_Shapes()->idx_get(1);
SharedPtr<IShape> shape2 = slide->get_Shapes()->idx_get(2);
SharedPtr<IShape> shape3 = slide->get_Shapes()->idx_get(4);
SlideUtil::AlignShapes(ShapesAlignmentType::AlignTop, true, pres->get_Slides()->idx_get(0), 
System::MakeArray<int32_t>(
    {
        slide->get_Shapes()->IndexOf(shape1),
        slide->get_Shapes()->IndexOf(shape2),
        slide->get_Shapes()->IndexOf(shape3)
    }));

Example 2

Το παρακάτω παράδειγμα δείχνει πώς να ευθυγραμμίσετε ολόκληρη τη συλλογή σχημάτων σε σχέση με το πιο κάτω σχήμα της συλλογής.

SharedPtr<Presentation> pres = MakeObject<Presentation>(u"example.pptx");
SlideUtil::AlignShapes(ShapesAlignmentType::AlignBottom, false, pres->get_Slides()->idx_get(0)->get_Shapes());

Flip Properties

Στο Aspose.Slides, η κλάση ShapeFrame παρέχει έλεγχο της οριζόντιας και κάθετης αντιστροφής των σχημάτων μέσω των ιδιοτήτων flipH και flipV. Και οι δύο ιδιότητες είναι τύπου NullableBool, επιτρέποντας τιμές True για αντιστροφή, False για χωρίς αντιστροφή, ή NotDefined για χρήση προεπιλεγμένης συμπεριφοράς. Αυτές οι τιμές είναι προσβάσιμες από το Frame ενός σχήματος.

Για να τροποποιήσετε τις ρυθμίσεις αντιστροφής, δημιουργείται μια νέα παρουσία ShapeFrame με την τρέχουσα θέση και μέγεθος του σχήματος, τις επιθυμητές τιμές για flipH και flipV, και τη γωνία περιστροφής. Η ανάθεση αυτής της παρουσίας στο Frame του σχήματος και η αποθήκευση της παρουσίασης εφαρμόζει τους μετασχηματισμούς καθρεπτισμού και τους καταγράφει στο αρχείο εξόδου.

Ας υποθέσουμε ότι έχουμε ένα αρχείο sample.pptx στο οποίο η πρώτη διαφάνεια περιέχει ένα μόνο σχήμα με προεπιλεγμένες ρυθμίσεις αντιστροφής, όπως φαίνεται παρακάτω.

The shape to be flipped

Ο παρακάτω κώδικας ανακτά τις τρέχουσες ιδιότητες αντιστροφής του σχήματος και το αντιστρέφει οριζόντια και κάθετα.

auto presentation = MakeObject<Presentation>(u"sample.pptx");

auto shape = presentation->get_Slide(0)->get_Shape(0);

// Ανάκτηση της ιδιότητας οριζόντιας αντανάκλασης του σχήματος.
auto horizontalFlip = shape->get_Frame()->get_FlipH();
Console::WriteLine(u"Horizontal flip: " + ObjectExt::ToString(horizontalFlip));

// Ανάκτηση της ιδιότητας κάθετης αντανάκλασης του σχήματος.
auto verticalFlip = shape->get_Frame()->get_FlipV();
Console::WriteLine(u"Vertical flip: " + ObjectExt::ToString(verticalFlip));

auto x = shape->get_Frame()->get_X();
auto y = shape->get_Frame()->get_Y();
auto width = shape->get_Frame()->get_Width();
auto height = shape->get_Frame()->get_Height();
auto flipH = NullableBool::True; // Αντιστροφή οριζόντια.
auto flipV = NullableBool::True; // Αντιστροφή οριζόντια.
auto rotation = shape->get_Frame()->get_Rotation();

shape->set_Frame(MakeObject<ShapeFrame>(x, y, width, height, flipH, flipV, rotation));

presentation->Save(u"output.pptx", SaveFormat::Pptx);
presentation->Dispose();

Το αποτέλεσμα:

The flipped shape

FAQ

Can I combine shapes (union/intersect/subtract) on a slide like in a desktop editor?

Δεν υπάρχει ενσωματωμένο API Boolean λειτουργιών. Μπορείτε να το προσεγγίσετε δημιουργώντας το επιθυμητό περίγραμμα εσείς – π.χ., υπολογίζοντας το τελικό γεωμετρικό σχήμα (μέσω του GeometryPath) και δημιουργώντας νέο σχήμα με αυτό το περίγραμμα, προαιρετικά αφαιρώντας τα αρχικά.

How can I control the stacking order (z-order) so a shape always stays “on top”?

Αλλάξτε τη σειρά εισαγωγής/μετακίνησης μέσα στη συλλογή shapes της διαφάνειας. Για προβλέψιμα αποτελέσματα, ορίστε το z-order μετά από όλες τις άλλες τροποποιήσεις της διαφάνειας.

Can I “lock” a shape to prevent users from editing it in PowerPoint?

Ναι. Ορίστε τις σημαίες προστασίας σε επίπεδο σχήματος (π.χ., κλείδωμα επιλογής, μετακίνησης, αλλαγής μεγέθους, επεξεργασίας κειμένου). Αν χρειάζεται, εφαρμόστε περιορισμούς και στο master ή το layout. Σημειώστε ότι αυτή είναι προστασία σε επίπεδο UI, όχι λειτουργία ασφαλείας· για ισχυρότερη προστασία, συνδυάστε με περιορισμούς σε επίπεδο αρχείου όπως προτάσεις μόνο για ανάγνωση ή κωδικούς πρόσβασης [/slides/el/cpp/password-protected-presentation/].