Zarządzanie komentarzami w prezentacji w C++

Przegląd

Ten artykuł wyjaśnia, jak zarządzać komentarzami w prezentacji w Aspose.Slides. Pokazuje główne typy związane z komentarzami oraz demonstruje, jak dodawać komentarze do slajdów, uzyskiwać dostęp do istniejących komentarzy, pracować z odpowiedziami, używać nowoczesnych komentarzy oraz usuwać komentarze z prezentacji.

Przykłady koncentrują się na typowych scenariuszach przeglądu i współpracy w PowerPoint, takich jak przydzielanie komentarzy autorom, odczytywanie treści i metadanych komentarzy, budowanie łańcuchów odpowiedzi oraz czyszczenie wszystkich komentarzy lub usuwanie wybranych.

W PowerPoint komentarz pojawia się jako notatka lub adnotacja na slajdzie. Po kliknięciu komentarza wyświetlana jest jego zawartość lub wiadomości.

Dlaczego dodawać komentarze do prezentacji?

Możesz chcieć używać komentarzy, aby przekazywać opinie lub komunikować się z kolegami podczas przeglądania prezentacji.

Aby umożliwić użycie komentarzy w prezentacjach PowerPoint, Aspose.Slides for C++ zapewnia

  • Klasa Presentation, która zawiera kolekcje autorów (z metody get_CommentAuthors()). Autorzy dodają komentarze do slajdów.
  • Interfejs ICommentCollection, który zawiera kolekcję komentarzy dla poszczególnych autorów.
  • Klasa IComment, która zawiera informacje o autorach i ich komentarzach: kto dodał komentarz, czas jego dodania, pozycję komentarza itp.
  • Klasa CommentAuthor, która zawiera informacje o poszczególnych autorach: nazwę autora, jego inicjały, komentarze powiązane z nazwą autora itp.

Dodaj komentarz do slajdu

Ten kod C++ pokazuje, jak dodać komentarz do slajdu w prezentacji PowerPoint:

// Tworzy instancję klasy Presentation
auto presentation = System::MakeObject<Presentation>();
// Dodaje pusty slajd
presentation->get_Slides()->AddEmptySlide(presentation->get_LayoutSlides()->idx_get(0));

// Dodaje autora
auto author = presentation->get_CommentAuthors()->AddAuthor(u"Jawad", u"MF");

// Ustawia pozycję komentarzy
PointF point;
point.set_X(0.2f);
point.set_Y(0.2f);

// Dostęp do ISlide 1
auto slide1 = presentation->get_Slides()->idx_get(0);
// Dostęp do ISlide 2
auto slide2 = presentation->get_Slides()->idx_get(1);

// Dodaje komentarz slajdu dla autora na slajdzie 1
author->get_Comments()->AddComment(u"Hello Jawad, this is slide comment", slide1, point, DateTime::get_Now());

// Dodaje komentarz slajdu dla autora na slajdzie 2
author->get_Comments()->AddComment(u"Hello Jawad, this is second slide comment", slide2, point, DateTime::get_Now());

// Gdy jako argument przekazany zostanie null, komentarze od wszystkich autorów są przywoływane na wybrany slajd
auto comments = slide1->GetSlideComments(author);

// Dostęp do komentarza o indeksie 0 dla slajdu 1
String str = comments[0]->get_Text();

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

if (comments->GetLength(0) > 0)
{
    // Wybiera kolekcję komentarzy autora o indeksie 0
    auto commentCollection = comments[0]->get_Author()->get_Comments();
    String Comment = commentCollection->idx_get(0)->get_Text();
}

Uzyskaj dostęp do komentarzy slajdu

Ten kod C++ pokazuje, jak uzyskać dostęp do istniejącego komentarza na slajdzie w prezentacji PowerPoint:

// Tworzy instancję klasy Presentation
auto presentation = System::MakeObject<Presentation>(u"Comments1.pptx");

for (auto&& commentAuthor : presentation->get_CommentAuthors())
{
    auto author = System::ExplicitCast<CommentAuthor>(commentAuthor);
    for (auto&& comment1 : System::IterateOver(author->get_Comments()))
    {
        SmartPtr<Comment> comment = System::ExplicitCast<Comment>(comment1);
        Console::WriteLine(String(u"ISlide :")
                        + comment->get_Slide()->get_SlideNumber()
                        + u" has comment: " + comment->get_Text()
                        + u" with Author: " + comment->get_Author()->get_Name()
                        + u" posted on time :" + comment->get_CreatedTime() + u"\n");
    }
}

Odpowiadanie na komentarze

Komentarz nadrzędny to górny lub oryginalny komentarz w hierarchii komentarzy lub odpowiedzi. Używając właściwości ParentComment (z interfejsu IComment), możesz ustawić lub pobrać komentarz nadrzędny.

Ten kod C++ pokazuje, jak dodawać komentarze i pobierać odpowiedzi na nie:

auto pres = System::MakeObject<Presentation>();

// Uzyskuje dostęp do ISlide 1
auto slide1 = pres->get_Slides()->idx_get(0);

// Dodaje komentarz
auto author1 = pres->get_CommentAuthors()->AddAuthor(u"Author_1", u"A.A.");
auto comment1 = author1->get_Comments()->AddComment(u"comment1", slide1, PointF(10.0f, 10.0f), DateTime::get_Now());

// Dodaje odpowiedź do comment1
auto author2 = pres->get_CommentAuthors()->AddAuthor(u"Autror_2", u"B.B.");
auto reply1 = author2->get_Comments()->AddComment(u"reply 1 for comment 1", slide1, PointF(10.0f, 10.0f), DateTime::get_Now());
reply1->set_ParentComment(comment1);

// Dodaje kolejną odpowiedź do comment1
auto reply2 = author2->get_Comments()->AddComment(u"reply 2 for comment 1", slide1, PointF(10.0f, 10.0f), DateTime::get_Now());
reply2->set_ParentComment(comment1);

// Dodaje odpowiedź do istniejącej odpowiedzi
auto subReply = author1->get_Comments()->AddComment(u"subreply 3 for reply 2", slide1, PointF(10.0f, 10.0f), DateTime::get_Now());
subReply->set_ParentComment(reply2);

auto comment2 = author2->get_Comments()->AddComment(u"comment 2", slide1, PointF(10.0f, 10.0f), DateTime::get_Now());
auto comment3 = author2->get_Comments()->AddComment(u"comment 3", slide1, PointF(10.0f, 10.0f), DateTime::get_Now());

auto reply3 = author1->get_Comments()->AddComment(u"reply 4 for comment 3", slide1, PointF(10.0f, 10.0f), DateTime::get_Now());
reply3->set_ParentComment(comment3);

// Wyświetla hierarchię komentarzy w konsoli
auto comments = slide1->GetSlideComments(nullptr);
for (int32_t i = 0; i < comments->get_Length(); i++)
{
    auto comment = comments[i];
    while (comment->get_ParentComment() != nullptr)
    {
        Console::Write(u"\t");
        comment = comment->get_ParentComment();
    }

    Console::Write(u"{0} : {1}", comments[i]->get_Author()->get_Name(), comments[i]->get_Text());
    Console::WriteLine();
}

pres->Save(u"parent_comment.pptx", SaveFormat::Pptx);

// Usuwa comment1 i wszystkie odpowiedzi na niego
comment1->Remove();

pres->Save(u"remove_comment.pptx", SaveFormat::Pptx);

Dodaj nowoczesny komentarz

W 2021 roku Microsoft wprowadził nowoczesne komentarze w PowerPoint. Funkcja nowoczesnych komentarzy znacznie usprawnia współpracę w PowerPoint. Dzięki nowoczesnym komentarzom użytkownicy PowerPoint mogą rozwiązywać komentarze, przypinać je do obiektów i tekstów oraz prowadzić interakcje znacznie łatwiej niż wcześniej.

W Aspose Slides for C++ 21.11, wdrożyliśmy obsługę nowoczesnych komentarzy, dodając klasę ModernComment. Do klasy CommentCollection dodano metody AddModernComment oraz InsertModernComment.

Ten kod C++ pokazuje, jak dodać nowoczesny komentarz do slajdu w prezentacji PowerPoint:

auto pres = System::MakeObject<Presentation>();
// Uzyskuje dostęp do ISlide 1
auto slide1 = pres->get_Slides()->idx_get(0);

auto newAuthor = pres->get_CommentAuthors()->AddAuthor(u"Some Author", u"SA");
auto modernComment = newAuthor->get_Comments()->AddModernComment(u"This is a modern comment", slide1, nullptr, PointF(100.0f, 100.0f), DateTime::get_Now());

pres->Save(u"pres.pptx", SaveFormat::Pptx);

Usuń komentarz

Usuń wszystkie komentarze i autorów

Ten kod C++ pokazuje, jak usunąć wszystkie komentarze i autorów w prezentacji:

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System::Drawing;

auto presentation = System::MakeObject<Presentation>(u"example.pptx");

// Usuwa wszystkie komentarze z prezentacji
for (auto author : presentation->get_CommentAuthors())
{
    author->get_Comments()->Clear();
}
        
// Usuwa wszystkich autorów
presentation->get_CommentAuthors()->Clear();
presentation->Save(u"example_out.pptx", SaveFormat::Pptx);

Usuń wybrane komentarze

Ten kod C++ pokazuje, jak usunąć określone komentarze na slajdzie:

using namespace Aspose::Slides;
using namespace Aspose::Slides::Export;
using namespace System::Drawing;

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slides()->idx_get(0);
        
// dodaj komentarze...
auto author = presentation->get_CommentAuthors()->AddAuthor(u"Author", u"A");
author->get_Comments()->AddComment(u"comment 1", slide, PointF(0.2f, 0.2f), System::DateTime::get_Now());
author->get_Comments()->AddComment(u"comment 2", slide, PointF(0.3f, 0.2f), System::DateTime::get_Now());
        
// usuń wszystkie komentarze zawierające tekst "comment 1"
for (auto commentAuthor : presentation->get_CommentAuthors())
{
    auto toRemove = System::MakeObject<System::Collections::Generic::List<System::SharedPtr<IComment>>>();
    for (auto comment : slide->GetSlideComments(commentAuthor))
    {
        if (comment->get_Text() == u"comment 1")
        {
            toRemove->Add(comment);
        }
    }
    for (auto comment : toRemove)
    {
        commentAuthor->get_Comments()->Remove(comment);
    }
}
        
presentation->Save(u"pres.pptx", SaveFormat::Pptx);

FAQ

Czy Aspose.Slides obsługuje status taki jak „rozwiązany” dla nowoczesnych komentarzy?

Tak. Nowoczesne komentarze udostępniają metody get_Status i set_Status. Możesz odczytać i ustawić stan komentarza (na przykład oznaczyć go jako rozwiązany), a stan ten jest zapisywany w pliku i rozpoznawany przez PowerPoint.

Czy obsługiwane są dyskusje wątkowe (łańcuchy odpowiedzi) i czy istnieje limit zagnieżdżenia?

Tak. Każdy komentarz może odwoływać się do swojego komentarza nadrzędnego, co umożliwia dowolne łańcuchy odpowiedzi. API nie określa konkretnego limitu głębokości zagnieżdzenia.

W jakim układzie współrzędnych określona jest pozycja znacznika komentarza na slajdzie?

Pozycja jest zapisywana jako punkt zmiennoprzecinkowy w układzie współrzędnych slajdu. Dzięki temu możesz umieścić znacznik komentarza dokładnie w wybranym miejscu.