Gestionar comentarios de presentaciones en Python

En PowerPoint, un comentario aparece como una nota o anotación en una diapositiva. Cuando se hace clic en un comentario, su contenido o mensajes se revelan.

¿Por qué añadir comentarios a las presentaciones?

Puede que desee usar comentarios para proporcionar retroalimentación o comunicarse con sus colegas al revisar presentaciones.

Para permitirle usar comentarios en presentaciones de PowerPoint, Aspose.Slides for Python a través de .NET ofrece

  • La clase Presentation , que contiene las colecciones de autores (del atributo CommentAuthorCollection). Los autores añaden comentarios a las diapositivas.
  • La clase CommentCollection , que contiene la colección de comentarios para autores individuales.
  • La clase Comment , que contiene información sobre los autores y sus comentarios: quién añadió el comentario, la hora en que se añadió, la posición del comentario, etc.
  • La clase CommentAuthor , que contiene información sobre autores individuales: el nombre del autor, sus iniciales, los comentarios asociados al nombre del autor, etc.

Añadir comentario a la diapositiva

Este código Python muestra cómo añadir un comentario a una diapositiva en una presentación de PowerPoint:

import aspose.slides as slides
import aspose.pydrawing as draw
import datetime

    # Instancia la clase Presentation
    # Añade una diapositiva vacía
    # Añade un autor
    # Establece la posición de los comentarios
    # Añade un comentario de diapositiva para un autor en la diapositiva 1
    # Añade un comentario de diapositiva para un autor en la diapositiva 2
    # Accediendo a ISlide 1
    # Cuando se pasa null como argumento, se traen los comentarios de todos los autores a la diapositiva seleccionada
    # Accede al comentario en el índice 0 de la diapositiva 1
    # Accessing ISlide 1
    # When null is passed as an argument, comments from all authors are brought to the selected slide
    # Accesses the comment at index 0 for slide 1

    with slides.Presentation() as presentation:
        # Adds an empty slide
        presentation.slides.add_empty_slide(presentation.layout_slides[0])

        # Adds an author
        author = presentation.comment_authors.add_author("Jawad", "MF")

        # Sets the position for comments
        point = draw.PointF(0.2, 0.2)

        # Adds slide comment for an author on slide 1
        author.comments.add_comment("Hello Jawad, this is slide comment", presentation.slides[0], point, datetime.date.today())

        # Adds slide comment for an author on slide 2
        author.comments.add_comment("Hello Jawad, this is second slide comment", presentation.slides[1], point, datetime.date.today())

        # Accessing ISlide 1
        slide = presentation.slides[0]

        # When null is passed as an argument, comments from all authors are brought to the selected slide
        comments = slide.get_slide_comments(author)

        # Accesses the comment at index 0 for slide 1
        str = comments[0].text

        presentation.save("Comments_out.pptx", slides.export.SaveFormat.PPTX)

        if comments.length > 0:
            # Selects the Author's comments collection at index 0
            commentCollection = comments[0].author.comments
            print(commentCollection[0].text)

Acceder a los comentarios de la diapositiva

Este código Python muestra cómo acceder a un comentario existente en una diapositiva de una presentación de PowerPoint:

import aspose.slides as slides

# Instancia la clase Presentation
with slides.Presentation("Comments1.pptx") as presentation:
    for author in presentation.comment_authors:
        for comment in author.comments:
            print("ISlide :" + str(comment.slide.slide_number) + 
            " has comment: " + comment.text + 
            " with Author: " + comment.author.name + 
            " posted on time :" + str(comment.created_time) + "\n")

Responder a comentarios

Un comentario padre es el comentario principal u original en una jerarquía de comentarios o respuestas. Usando la propiedad parent_comment (de la clase Comment), puede establecer o obtener un comentario padre.

Este código Python muestra cómo añadir comentarios y obtener respuestas a los mismos:

import aspose.slides as slides
import aspose.pydrawing as draw
import datetime

with slides.Presentation() as pres:
    # Añade un comentario
    author1 = pres.comment_authors.add_author("Author_1", "A.A.")
    comment1 = author1.comments.add_comment("comment1", pres.slides[0], draw.PointF(10, 10), datetime.date.today())

    # Añade una respuesta al comentario1
    author2 = pres.comment_authors.add_author("Autror_2", "B.B.")
    reply1 = author2.comments.add_comment("reply 1 for comment 1", pres.slides[0], draw.PointF(10, 10), datetime.date.today())
    reply1.parent_comment = comment1

    # Añade otra respuesta al comentario1
    reply2 = author2.comments.add_comment("reply 2 for comment 1", pres.slides[0], draw.PointF(10, 10), datetime.date.today())
    reply2.parent_comment = comment1

    # Añade una respuesta a la respuesta existente
    subReply = author1.comments.add_comment("subreply 3 for reply 2", pres.slides[0], draw.PointF(10, 10), datetime.date.today())
    subReply.parent_comment = reply2

    comment2 = author2.comments.add_comment("comment 2", pres.slides[0], draw.PointF(10, 10), datetime.date.today())
    comment3 = author2.comments.add_comment("comment 3", pres.slides[0], draw.PointF(10, 10), datetime.date.today())

    reply3 = author1.comments.add_comment("reply 4 for comment 3", pres.slides[0], draw.PointF(10, 10), datetime.date.today())
    reply3.parent_comment = comment3

    # Muestra la jerarquía de comentarios en la consola
    slide = pres.slides[0]
    comments = slide.get_slide_comments(None)
    for i in range(comments.length):
        comment = comments[i]
        while comment.parent_comment is not None:
            print("\t")
            comment = comment.parent_comment

        print(comments[i].author.name + " : " + comments[i].text)
        print("\r\n")

    pres.save("parent_comment.pptx", slides.export.SaveFormat.PPTX)

    # Elimina el comentario1 y todas sus respuestas
    comment1.remove()

    pres.save("remove_comment.pptx", slides.export.SaveFormat.PPTX)

Añadir comentario moderno

En 2021, Microsoft introdujo comentarios modernos en PowerPoint. La función de comentarios modernos mejora significativamente la colaboración en PowerPoint. Gracias a los comentarios modernos, los usuarios de PowerPoint pueden resolver comentarios, anclar comentarios a objetos y textos, y participar en interacciones de forma mucho más sencilla que antes.

Implementamos compatibilidad con comentarios modernos añadiendo la clase ModernComment. Los métodos add_modern_comment e insert_modern_comment se añadieron a la clase CommentCollection.

Este código Python muestra cómo añadir un comentario moderno a una diapositiva en una presentación de PowerPoint:

import aspose.pydrawing as draw
import aspose.slides as slides
from datetime import date

with slides.Presentation() as pres:
    newAuthor = pres.comment_authors.add_author("Some Author", "SA")
    modernComment = newAuthor.comments.add_modern_comment("This is a modern comment", pres.slides[0], None, draw.PointF(100, 100), date.today())

    pres.save("example.pptx", slides.export.SaveFormat.PPTX)

Eliminar comentario

Eliminar todos los comentarios y autores

Este código Python muestra cómo eliminar todos los comentarios y autores en una presentación:

import aspose.slides as slides

with slides.Presentation("example.pptx") as presentation:
    # Elimina todos los comentarios de la presentación
    for author in presentation.comment_authors:
        author.comments.clear()

    # Elimina todos los autores
    presentation.comment_authors.clear()

    presentation.save("example_out.pptx", slides.export.SaveFormat.PPTX)

Eliminar comentarios específicos

Este código Python muestra cómo eliminar comentarios específicos en una diapositiva:

import aspose.pydrawing as draw
import aspose.slides as slides
from datetime import date

with slides.Presentation() as presentation:
    slide = presentation.slides[0]
    
    # añadir comentarios...
    author = presentation.comment_authors.add_author("Author", "A")
    author.comments.add_comment("comment 1", slide, draw.PointF(0.2, 0.2), date.today())
    author.comments.add_comment("comment 2", slide, draw.PointF(0.3, 0.2), date.today())
    
    # eliminar todos los comentarios que contengan el texto "comment 1"
    for commentAuthor in presentation.comment_authors:
        toRemove = []
        for comment in slide.get_slide_comments(commentAuthor):
            if comment.text == "comment 1":
                toRemove.append(comment)
        
        for comment in toRemove:
            commentAuthor.comments.remove(comment)
    
    presentation.save("pres.pptx", slides.export.SaveFormat.PPTX)

Preguntas frecuentes

¿Aspose.Slides admite un estado como ‘resuelto’ para los comentarios modernos?

Sí. Los comentarios modernos exponen una propiedad status; puede leer y establecer el estado del comentario (por ejemplo, marcarlo como resuelto), y este estado se guarda en el archivo y es reconocido por PowerPoint.

¿Se admiten discusiones en hilos (cadenas de respuestas) y hay un límite de anidación?

Sí. Cada comentario puede referenciar su comentario padre, lo que permite cadenas de respuestas arbitrarias. La API no declara un límite específico de profundidad de anidación.

¿En qué sistema de coordenadas se define la posición del marcador de comentario en una diapositiva?

La posición se almacena como un punto de coma flotante en el sistema de coordenadas de la diapositiva. Esto le permite colocar el marcador de comentario exactamente donde lo necesita.