Füge einen Kommentar zu einer Folie hinzu

OpenXML Präsentation:


 string FilePath = @"..\..\..\..\Beispieldateien\";

string FileName = FilePath + "Füge einen Kommentar zu einer Folie hinzu.pptx"; 

AddCommentToPresentation(FileName,

"Zeeshan", "MZ",

"Dies ist mein programmgesteuert hinzugefügter Kommentar.");

// Fügt einen Kommentar zur ersten Folie des Präsentationsdokuments hinzu.

// Das Präsentationsdokument muss mindestens eine Folie enthalten.

private static void AddCommentToPresentation(string file, string initials, string name, string text)

{

using (PresentationDocument doc = PresentationDocument.Open(file, true))

{

    // Deklariere ein CommentAuthorsPart-Objekt.

    CommentAuthorsPart authorsPart;

    // Überprüfe, ob ein vorhandenes Kommentarautoren-Teil existiert.

    if (doc.PresentationPart.CommentAuthorsPart == null)

    {

        // Falls nicht, füge ein neues hinzu.

        authorsPart = doc.PresentationPart.AddNewPart<CommentAuthorsPart>();

    }

    else

    {

        authorsPart = doc.PresentationPart.CommentAuthorsPart;

    }

    // Überprüfe, ob eine Kommentator-Liste im Kommentarautoren-Teil vorhanden ist.

    if (authorsPart.CommentAuthorList == null)

    {

        // Falls nicht, füge eine neue hinzu.

        authorsPart.CommentAuthorList = new CommentAuthorList();

    }

    // Deklariere eine neue Autoren-ID.

    uint authorId = 0;

    CommentAuthor author = null;

    // Wenn es existierende Kind-Elemente in der Kommentatorenliste gibt...

    if (authorsPart.CommentAuthorList.HasChildren)

    {

        // Überprüfe, ob der übergebene Autor in der Liste ist.

        var authors = authorsPart.CommentAuthorList.Elements<CommentAuthor>().Where(a => a.Name == name && a.Initials == initials);

        // Wenn ja...

        if (authors.Any())

        {

            // Weisen Sie dem neuen Kommentator die vorhandene Autoren-ID zu.

            author = authors.First();

            authorId = author.Id;

        }

        // Wenn nicht...

        if (author == null)

        {

            // Weisen Sie dem übergebenen Autor eine neue ID zu

            authorId = authorsPart.CommentAuthorList.Elements<CommentAuthor>().Select(a => a.Id.Value).Max();

        }

    }

    // Wenn es keine existierenden Kind-Elemente in der Kommentatorenliste gibt.

    if (author == null)

    {

        authorId++;

        // Füge ein neues Kind-Element (Kommentarautor) zur Kommentatorenliste hinzu.

        author = authorsPart.CommentAuthorList.AppendChild<CommentAuthor>

        (new CommentAuthor()

        {

            Id = authorId,

            Name = name,

            Initials = initials,

            ColorIndex = 0

        });

    }

    // Hole die erste Folie mit der GetFirstSlide-Methode.

    SlidePart slidePart1 = GetFirstSlide(doc);

    // Deklariere ein Kommentare-Teil.

    SlideCommentsPart commentsPart;

    // Überprüfe, ob es ein Kommentare-Teil in der ersten Folie gibt.

    if (slidePart1.GetPartsOfType<SlideCommentsPart>().Count() == 0)

    {

        // Falls nicht, füge ein neues Kommentare-Teil hinzu.

        commentsPart = slidePart1.AddNewPart<SlideCommentsPart>();

    }

    else

    {

        // Sonst verwende das erste Kommentare-Teil im Folienteil.

        commentsPart = slidePart1.GetPartsOfType<SlideCommentsPart>().First();

    }

    // Wenn die Kommentarliste nicht existiert.

    if (commentsPart.CommentList == null)

    {

        // Füge eine neue Kommentarliste hinzu.

        commentsPart.CommentList = new CommentList();

    }

    // Hole die neue Kommentar-ID.

    uint commentIdx = author.LastIndex == null ? 1 : author.LastIndex + 1;

    author.LastIndex = commentIdx;

    // Füge einen neuen Kommentar hinzu.

    Comment comment = commentsPart.CommentList.AppendChild<Comment>(

    new Comment()

    {

        AuthorId = authorId,

        Index = commentIdx,

        DateTime = DateTime.Now

    });

    // Füge das Positions-Kindknoten-Element zum Kommentar-Element hinzu.

    comment.Append(

    new Position() { X = 100, Y = 200 },

    new Text() { Text = text });

    // Speichere das Kommentarautoren-Teil.

    authorsPart.CommentAuthorList.Save();

    // Speichere das Kommentare-Teil.

    commentsPart.CommentList.Save();

}

}

// Hole das Folienteil der ersten Folie im Präsentationsdokument.

private static SlidePart GetFirstSlide(PresentationDocument presentationDocument)

{

// Hole die Beziehungs-ID der ersten Folie

PresentationPart part = presentationDocument.PresentationPart;

SlideId slideId = part.Presentation.SlideIdList.GetFirstChild<SlideId>();

string relId = slideId.RelationshipId;

// Hole das Folienteil anhand der Beziehungs-ID.

SlidePart slidePart = (SlidePart)part.GetPartById(relId);

return slidePart;

}


Aspose.Slides

In Aspose.Slides für .NET ist die PPT-Folienkommentarsammlung in jeder Slide-Klasse enthalten. Die CommentCollection-Klasse wird verwendet, um die Kommentare der jeweiligen Folie zu halten. Die Comment-Klasse enthält Informationen wie den Autor, der den Folienkommentar hinzugefügt hat, seine Initialen, die Zeit der Erstellung, die Position des Kommentars auf der Folie und den Kommentartext. Die CommentAuthor-Klasse wird verwendet, um die Autoren für Folienkommentare auf Präsentationsebene hinzuzufügen. Die Presentation-Klasse enthält die Sammlung von Autoren für die Präsentation in der CommentAuthors-Klasse.

Im folgenden Beispiel haben wir den Code-Schnipsel zum Hinzufügen der Folienkommentare hinzugefügt.


 string FilePath = @"..\..\..\..\Beispieldateien\";

string FileName = FilePath + "Füge einen Kommentar zu einer Folie hinzu.pptx";

using (Presentation pres = new Presentation())

{

    // Leere Folie hinzufügen

    pres.Slides.AddEmptySlide(pres.LayoutSlides[0]);

    // Autor hinzufügen

    ICommentAuthor author = pres.CommentAuthors.AddAuthor("Zeeshan", "MZ");

    // Position der Kommentare

    PointF point = new PointF();

    point.X = 1;

    point.Y = 1;

    // Folienkommentar für einen Autor auf der Folie hinzufügen

    author.Comments.AddComment("Hallo Zeeshan, dies ist ein Folienkommentar", pres.Slides[0], point, DateTime.Now);

    pres.Save(FileName, Aspose.Slides.Export.SaveFormat.Pptx);

}

Beispielcode herunterladen