Добавить комментарий к слайду
Contents
[
Hide
]
OpenXML Презентация:
string FilePath = @"..\..\..\..\Примеры Файлов\";
string FileName = FilePath + "Добавить комментарий к слайду.pptx";
AddCommentToPresentation(FileName,
"Zeeshan", "MZ",
"Это мой программно добавленный комментарий.");
// Добавляет комментарий к первому слайду презентации.
// Презентация должна содержать как минимум один слайд.
private static void AddCommentToPresentation(string file, string initials, string name, string text)
{
using (PresentationDocument doc = PresentationDocument.Open(file, true))
{
// Объявить объект CommentAuthorsPart.
CommentAuthorsPart authorsPart;
// Проверить, существует ли часть авторов комментариев.
if (doc.PresentationPart.CommentAuthorsPart == null)
{
// Если нет, добавить новую.
authorsPart = doc.PresentationPart.AddNewPart<CommentAuthorsPart>();
}
else
{
authorsPart = doc.PresentationPart.CommentAuthorsPart;
}
// Проверить, существует ли список авторов комментариев в части авторов комментариев.
if (authorsPart.CommentAuthorList == null)
{
// Если нет, добавить новый.
authorsPart.CommentAuthorList = new CommentAuthorList();
}
// Объявить новый идентификатор автора.
uint authorId = 0;
CommentAuthor author = null;
// Если в списке авторов комментариев есть существующие дочерние элементы...
if (authorsPart.CommentAuthorList.HasChildren)
{
// Проверить, есть ли автор в списке.
var authors = authorsPart.CommentAuthorList.Elements<CommentAuthor>().Where(a => a.Name == name && a.Initials == initials);
// Если да...
if (authors.Any())
{
// Присвоить новому автору комментария существующий идентификатор автора.
author = authors.First();
authorId = author.Id;
}
// Если нет...
if (author == null)
{
// Присвоить переданному автору новый идентификатор
authorId = authorsPart.CommentAuthorList.Elements<CommentAuthor>().Select(a => a.Id.Value).Max();
}
}
// Если в списке авторов комментариев нет дочерних элементов.
if (author == null)
{
authorId++;
// Добавить новый дочерний элемент (автор комментария) в список авторов комментариев.
author = authorsPart.CommentAuthorList.AppendChild<CommentAuthor>
(new CommentAuthor()
{
Id = authorId,
Name = name,
Initials = initials,
ColorIndex = 0
});
}
// Получить первый слайд, используя метод GetFirstSlide.
SlidePart slidePart1 = GetFirstSlide(doc);
// Объявить часть комментариев.
SlideCommentsPart commentsPart;
// Проверить, существует ли часть комментариев в первом слайде.
if (slidePart1.GetPartsOfType<SlideCommentsPart>().Count() == 0)
{
// Если нет, добавить новую часть комментариев.
commentsPart = slidePart1.AddNewPart<SlideCommentsPart>();
}
else
{
// Иначе, использовать первую часть комментариев в слайде.
commentsPart = slidePart1.GetPartsOfType<SlideCommentsPart>().First();
}
// Если список комментариев не существует.
if (commentsPart.CommentList == null)
{
// Добавить новый список комментариев.
commentsPart.CommentList = new CommentList();
}
// Получить новый идентификатор комментария.
uint commentIdx = author.LastIndex == null ? 1 : author.LastIndex + 1;
author.LastIndex = commentIdx;
// Добавить новый комментарий.
Comment comment = commentsPart.CommentList.AppendChild<Comment>(
new Comment()
{
AuthorId = authorId,
Index = commentIdx,
DateTime = DateTime.Now
});
// Добавить дочерний узел позиции к элементу комментария.
comment.Append(
new Position() { X = 100, Y = 200 },
new Text() { Text = text });
// Сохранить часть авторов комментариев.
authorsPart.CommentAuthorList.Save();
// Сохранить часть комментариев.
commentsPart.CommentList.Save();
}
}
// Получить часть слайда первого слайда в документе презентации.
private static SlidePart GetFirstSlide(PresentationDocument presentationDocument)
{
// Получить идентификатор отношения первого слайда
PresentationPart part = presentationDocument.PresentationPart;
SlideId slideId = part.Presentation.SlideIdList.GetFirstChild<SlideId>();
string relId = slideId.RelationshipId;
// Получить часть слайда по идентификатору отношения.
SlidePart slidePart = (SlidePart)part.GetPartById(relId);
return slidePart;
}
Aspose.Slides
В Aspose.Slides для .NET коллекция комментариев к слайдам включена в каждый класс Slide. Класс CommentCollection используется для хранения комментариев конкретного слайда. Класс Comment включает информацию о авторе, который добавил комментарий к слайду, его инициалы, время создания, положение комментария на слайде и текст комментария. Класс CommentAuthor используется для добавления авторов для комментариев к слайдам на уровне презентации. Класс Presentation хранит коллекцию авторов для презентации в классе CommentAuthors.
В следующем примере мы добавили фрагмент кода для добавления комментариев к слайду.
string FilePath = @"..\..\..\..\Примеры Файлов\";
string FileName = FilePath + "Добавить комментарий к слайду.pptx";
using (Presentation pres = new Presentation())
{
//Добавление пустого слайда
pres.Slides.AddEmptySlide(pres.LayoutSlides[0]);
//Добавление автора
ICommentAuthor author = pres.CommentAuthors.AddAuthor("Zeeshan", "MZ");
//Положение комментариев
PointF point = new PointF();
point.X = 1;
point.Y = 1;
//Добавление комментария к слайду для автора на слайде
author.Comments.AddComment("Привет, Зишан, это комментарий к слайду", pres.Slides[0], point, DateTime.Now);
pres.Save(FileName, Aspose.Slides.Export.SaveFormat.Pptx);
}