Применение темы к презентации
Contents
[
Hide
]
OpenXML Презентация:
string FilePath = @"..\..\..\..\Примеры Файлы\";
string FileName = FilePath + "Применение темы к презентации.pptx";
string ThemeFileName = FilePath + "Тема.pptx";
ApplyThemeToPresentation(FileName, ThemeFileName);
// Применить новую тему к презентации.
public static void ApplyThemeToPresentation(string presentationFile, string themePresentation)
{
using (PresentationDocument themeDocument = PresentationDocument.Open(themePresentation, false))
using (PresentationDocument presentationDocument = PresentationDocument.Open(presentationFile, true))
{
ApplyThemeToPresentation(presentationDocument, themeDocument);
}
}
// Применить новую тему к презентации.
public static void ApplyThemeToPresentation(PresentationDocument presentationDocument, PresentationDocument themeDocument)
{
if (presentationDocument == null)
{
throw new ArgumentNullException("presentationDocument");
}
if (themeDocument == null)
{
throw new ArgumentNullException("themeDocument");
}
// Получите часть презентации документа презентации.
PresentationPart presentationPart = presentationDocument.PresentationPart;
// Получите существующую часть мастер-слайда.
SlideMasterPart slideMasterPart = presentationPart.SlideMasterParts.ElementAt(0);
string relationshipId = presentationPart.GetIdOfPart(slideMasterPart);
// Получите новую часть мастер-слайда.
SlideMasterPart newSlideMasterPart = themeDocument.PresentationPart.SlideMasterParts.ElementAt(0);
// Удалите существующую часть темы.
presentationPart.DeletePart(presentationPart.ThemePart);
// Удалите старую часть мастер-слайда.
presentationPart.DeletePart(slideMasterPart);
// Импортируйте новую часть мастер-слайда и повторно используйте старый идентификатор отношения.
newSlideMasterPart = presentationPart.AddPart(newSlideMasterPart, relationshipId);
// Смените на новую часть темы.
presentationPart.AddPart(newSlideMasterPart.ThemePart);
Dictionary<string, SlideLayoutPart> newSlideLayouts = new Dictionary<string, SlideLayoutPart>();
foreach (var slideLayoutPart in newSlideMasterPart.SlideLayoutParts)
{
newSlideLayouts.Add(GetSlideLayoutType(slideLayoutPart), slideLayoutPart);
}
string layoutType = null;
SlideLayoutPart newLayoutPart = null;
// Вставьте код для компоновки для этого примера.
string defaultLayoutType = "Заголовок и содержимое";
// Удалите отношение компоновки слайдов на всех слайдах.
foreach (var slidePart in presentationPart.SlideParts)
{
layoutType = null;
if (slidePart.SlideLayoutPart != null)
{
// Определите тип компоновки слайда для каждого слайда.
layoutType = GetSlideLayoutType(slidePart.SlideLayoutPart);
// Удалите старую часть компоновки.
slidePart.DeletePart(slidePart.SlideLayoutPart);
}
if (layoutType != null && newSlideLayouts.TryGetValue(layoutType, out newLayoutPart))
{
// Примените новую часть компоновки.
slidePart.AddPart(newLayoutPart);
}
else
{
newLayoutPart = newSlideLayouts[defaultLayoutType];
// Примените новую часть компоновки по умолчанию.
slidePart.AddPart(newLayoutPart);
}
}
}
// Получите тип компоновки слайда.
public static string GetSlideLayoutType(SlideLayoutPart slideLayoutPart)
{
CommonSlideData slideData = slideLayoutPart.SlideLayout.CommonSlideData;
// Примечания: если это используется в продуктивном коде, проверьте на наличие нулевой ссылки.
return slideData.Name;
}
Aspose.Slides
Чтобы применить тему, нам нужно клонировать слайд с мастером, пожалуйста, следуйте приведенным ниже шагам:
- Создайте экземпляр класса Presentation, содержащий исходную презентацию, из которой слайд будет клонироваться.
- Создайте экземпляр класса Presentation, содержащий целевую презентацию, в которую слайд будет клонироваться.
- Получите слайд, который нужно клонировать, вместе с мастер-слайдом.
- Создайте экземпляр класса IMasterSlideCollection, ссылаясь на коллекцию Masters, предоставляемую объектом Presentation целевой презентации.
- Вызовите метод AddClone, предоставленный объектом IMasterSlideCollection, и передайте мастер из исходного PPTX, который нужно клонировать, в качестве параметра метода AddClone.
- Создайте экземпляр класса ISlideCollection, установив ссылку на коллекцию Slides, предоставляемую объектом Presentation целевой презентации.
- Вызовите метод AddClone, предоставленный объектом ISlideCollection, и передайте слайд из исходной презентации для клонирования и мастер-слайд в качестве параметра метода AddClone.
- Запишите измененный файл целевой презентации.
string FilePath = @"..\..\..\..\Примеры Файлы\";
string FileName = FilePath + "Применение темы к презентации.pptx";
string ThemeFileName = FilePath + "Тема.pptx";
ApplyThemeToPresentation(ThemeFileName, FileName);
public static void ApplyThemeToPresentation(string presentationFile, string outputFile)
{
//Создайте экземпляр класса Presentation для загрузки файла исходной презентации
Presentation srcPres = new Presentation(presentationFile);
//Создайте экземпляр класса Presentation для целевой презентации (где слайд должен быть клонирован)
Presentation destPres = new Presentation(outputFile);
//Создайте ISlide из коллекции слайдов в исходной презентации вместе с
//мастер-слайдом
ISlide SourceSlide = srcPres.Slides[0];
//Клонируйте желаемый мастер-слайд из исходной презентации в коллекцию мастеров в
//целевой презентации
IMasterSlideCollection masters = destPres.Masters;
IMasterSlide SourceMaster = SourceSlide.LayoutSlide.MasterSlide;
//Клонируйте желаемый мастер-слайд из исходной презентации в коллекцию мастеров в
//целевой презентации
IMasterSlide iSlide = masters.AddClone(SourceMaster);
//Клонируйте желаемый слайд из исходной презентации с желаемым мастером в конец коллекции
//слайдов в целевой презентации
ISlideCollection slds = destPres.Slides;
slds.AddClone(SourceSlide, iSlide, true);
//Клонируйте желаемый мастер-слайд из исходной презентации в коллекцию мастеров в
//целевой презентации
//Сохраните целевую презентацию на диск
destPres.Save(outputFile, SaveFormat.Pptx);
}