Gérer les commentaires de présentation en C++

Dans PowerPoint, un commentaire apparaît comme une note ou une annotation sur une diapositive. Lorsqu’un commentaire est cliqué, son contenu ou ses messages sont affichés.

Pourquoi ajouter des commentaires aux présentations ?

Vous pouvez vouloir utiliser les commentaires pour fournir des retours ou communiquer avec vos collègues lors de la révision des présentations.

  • La classe Presentation qui contient les collections d’auteurs (à partir de la méthode get_CommentAuthors()). Les auteurs ajoutent des commentaires aux diapositives.
  • L’interface ICommentCollection qui contient la collection de commentaires pour chaque auteur.
  • La classe IComment qui contient des informations sur les auteurs et leurs commentaires : qui a ajouté le commentaire, l’heure à laquelle le commentaire a été ajouté, la position du commentaire, etc.
  • La classe CommentAuthor qui contient des informations sur chaque auteur : le nom de l’auteur, ses initiales, les commentaires associés à son nom, etc.

Ajouter un commentaire à une diapositive

Ce code C++ montre comment ajouter un commentaire à une diapositive dans une présentation PowerPoint :

// Instancie la classe Presentation
auto presentation = System::MakeObject<Presentation>();
// Ajoute une diapositive vide
presentation->get_Slides()->AddEmptySlide(presentation->get_LayoutSlides()->idx_get(0));

// Ajoute un auteur
auto author = presentation->get_CommentAuthors()->AddAuthor(u"Jawad", u"MF");

// Définit la position des commentaires
PointF point;
point.set_X(0.2f);
point.set_Y(0.2f);

// Accède à ISlide 1
auto slide1 = presentation->get_Slides()->idx_get(0);
// Accède à ISlide 2
auto slide2 = presentation->get_Slides()->idx_get(1);

// Ajoute un commentaire de diapositive pour un auteur sur la diapositive 1
author->get_Comments()->AddComment(u"Hello Jawad, this is slide comment", slide1, point, DateTime::get_Now());

// Ajoute un commentaire de diapositive pour un auteur sur la diapositive 2
author->get_Comments()->AddComment(u"Hello Jawad, this is second slide comment", slide2, point, DateTime::get_Now());

// Lorsqu'un null est passé en argument, les commentaires de tous les auteurs sont récupérés pour la diapositive sélectionnée
auto comments = slide1->GetSlideComments(author);

// Accède au commentaire à l'index 0 pour la diapositive 1
String str = comments[0]->get_Text();

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

if (comments->GetLength(0) > 0)
{
    // Sélectionne la collection de commentaires de l'auteur à l'index 0
    auto commentCollection = comments[0]->get_Author()->get_Comments();
    String Comment = commentCollection->idx_get(0)->get_Text();
}

Accéder aux commentaires d’une diapositive

Ce code C++ montre comment accéder à un commentaire existant sur une diapositive dans une présentation PowerPoint :

// Instancie la classe 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");
    }
}

Répondre aux commentaires

Un commentaire parent est le commentaire principal ou original dans une hiérarchie de commentaires ou de réponses. En utilisant la propriété ParentComment (de l’interface IComment), vous pouvez définir ou obtenir un commentaire parent.

Ce code C++ montre comment ajouter des commentaires et récupérer leurs réponses :

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

// Accède à ISlide 1
auto slide1 = pres->get_Slides()->idx_get(0);

// Ajoute un commentaire
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());

// Ajoute une réponse au commentaire1
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);

// Ajoute une autre réponse au commentaire1
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);

// Ajoute une réponse à la réponse existante
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);

// Affiche la hiérarchie des commentaires sur la console
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);

// Supprime le commentaire1 et toutes ses réponses
comment1->Remove();

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

Ajouter un commentaire moderne

En 2021, Microsoft a introduit les commentaires modernes dans PowerPoint. La fonctionnalité de commentaires modernes améliore considérablement la collaboration dans PowerPoint. Grâce aux commentaires modernes, les utilisateurs de PowerPoint peuvent résoudre les commentaires, ancrer les commentaires à des objets et du texte, et interagir beaucoup plus facilement qu’auparavant.

Dans Aspose Slides for C++ 21.11, nous avons implémenté la prise en charge des commentaires modernes en ajoutant la classe ModernComment. Les méthodes AddModernComment et InsertModernComment ont été ajoutées à la classe CommentCollection.

Ce code C++ montre comment ajouter un commentaire moderne à une diapositive dans une présentation PowerPoint :

auto pres = System::MakeObject<Presentation>();
// Accède à 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);

Supprimer un commentaire

Supprimer tous les commentaires et auteurs

Ce code C++ montre comment supprimer tous les commentaires et auteurs d’une présentation :

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

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

// Supprime tous les commentaires de la présentation
for (auto author : presentation->get_CommentAuthors())
{
    author->get_Comments()->Clear();
}
        
// Supprime tous les auteurs
presentation->get_CommentAuthors()->Clear();
presentation->Save(u"example_out.pptx", SaveFormat::Pptx);

Supprimer des commentaires spécifiques

Ce code C++ montre comment supprimer des commentaires spécifiques sur une diapositive :

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);
        
// ajouter des commentaires...
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());
        
// supprimer tous les commentaires qui contiennent le texte "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

Aspose.Slides prend‑il en charge un statut comme « résolu » pour les commentaires modernes ?

Oui. Les commentaires modernes exposent les méthodes get_Status et set_Status. Vous pouvez lire et définir l’état d’un commentaire (par exemple, le marquer comme résolu), et cet état est enregistré dans le fichier et reconnu par PowerPoint.

Les discussions en fil (chaînes de réponses) sont‑elles prises en charge, et existe‑t‑il une limite de profondeur ?

Oui. Chaque commentaire peut référencer son parent comment, permettant des chaînes de réponses arbitraires. L’API ne déclare pas de limite de profondeur spécifique.

Dans quel système de coordonnées la position du marqueur de commentaire est‑elle définie sur une diapositive ?

La position est stockée comme un point à virgule flottante dans le système de coordonnées de la diapositive. Cela vous permet de placer le marqueur de commentaire exactement où vous le souhaitez.