public SlideSource(string fileName, int start, int count, bool keepMaster) { PmlDocument = new PmlDocument(fileName); Start = start; Count = count; KeepMaster = keepMaster; }
public SlideSource(PmlDocument source, int start, bool keepMaster) { PmlDocument = source; Start = start; Count = int.MaxValue; KeepMaster = keepMaster; }
public SlideSource(PmlDocument source, int start, int count, bool keepMaster) { PmlDocument = source; Start = start; Count = count; KeepMaster = keepMaster; }
public SlideSource(string fileName, bool keepMaster) { PmlDocument = new PmlDocument(fileName); Start = 0; Count = int.MaxValue; KeepMaster = keepMaster; }
public void MG001(string name) { DirectoryInfo sourceDir = new DirectoryInfo("../../../../TestFiles/"); FileInfo fi = new FileInfo(Path.Combine(sourceDir.FullName, name)); MetricsGetterSettings settings = new MetricsGetterSettings() { IncludeTextInContentControls = false, IncludeXlsxTableCellData = false, RetrieveNamespaceList = true, RetrieveContentTypeList = true, }; var extension = fi.Extension.ToLower(); XElement metrics = null; if (Util.IsWordprocessingML(extension)) { WmlDocument wmlDocument = new WmlDocument(fi.FullName); metrics = MetricsGetter.GetDocxMetrics(wmlDocument, settings); } else if (Util.IsSpreadsheetML(extension)) { SmlDocument smlDocument = new SmlDocument(fi.FullName); metrics = MetricsGetter.GetXlsxMetrics(smlDocument, settings); } else if (Util.IsPresentationML(extension)) { PmlDocument pmlDocument = new PmlDocument(fi.FullName); metrics = MetricsGetter.GetPptxMetrics(pmlDocument, settings); } Assert.NotNull(metrics); }
public void ReassemblePresentationWithMaster(string fileName) { var file = Path.Combine(SourceDirectory, fileName); var presentation = new PmlDocument(file); // generate presentation with all masters var onlyMaster = PresentationBuilder.BuildPresentation( new List <SlideSource> { new SlideSource(presentation, 0, 0, true) }); // publish slides with one-layout masters var slides = PresentationBuilder.PublishSlides(presentation); // compose them together using only master as the first source var sources = new List <SlideSource> { new SlideSource(onlyMaster, true) }; sources.AddRange(slides.Select(x => new SlideSource(x, false))); var newDocument = PresentationBuilder.BuildPresentation(sources); newDocument.FileName = fileName.Replace(".pptx", "_reassembledWithMaster.pptx"); newDocument.SaveAs(Path.Combine(TargetDirectory, newDocument.FileName)); var baseSize = slides.Sum(x => x.DocumentByteArray.Length) + onlyMaster.DocumentByteArray.Length; Assert.InRange(newDocument.DocumentByteArray.Length, 0.85 * baseSize, 1.1 * baseSize); }
public void ExtractMasters(string fileName) { var source = new PmlDocument(Path.Combine(SourceDirectory, fileName)); int numberOfMasters; using (var stream = new OpenXmlMemoryStreamDocument(source)) { using var doc1 = stream.GetPresentationDocument(); numberOfMasters = doc1.PresentationPart.SlideMasterParts.Count(); } var onlyMaster = PresentationBuilder.BuildPresentation( new List <SlideSource> { new SlideSource(source, 0, 0, true) }); onlyMaster.FileName = fileName.Replace(".pptx", "_masterOnly.pptx"); onlyMaster.SaveAs(Path.Combine(TargetDirectory, onlyMaster.FileName)); using var streamDoc = new OpenXmlMemoryStreamDocument(onlyMaster); using var resDoc = streamDoc.GetPresentationDocument(); Assert.Empty(resDoc.PresentationPart.SlideParts); Assert.Equal(numberOfMasters, resDoc.PresentationPart.SlideMasterParts.Count()); }
public void ReassemblePresentationWithMaster(string fileName) { var file = Path.Combine(SourceDirectory, fileName); var presentation = new PmlDocument(file); // generate presentation with all masters var onlyMaster = PresentationBuilder.BuildPresentation( new List <SlideSource> { new(presentation, 0, 0, true) });
static void Main(string[] args) { var n = DateTime.Now; var tempDi = new DirectoryInfo(string.Format("ExampleOutput-{0:00}-{1:00}-{2:00}-{3:00}{4:00}{5:00}", n.Year - 2000, n.Month, n.Day, n.Hour, n.Minute, n.Second)); tempDi.Create(); string source1 = "../../Contoso.pptx"; string source2 = "../../Companies.pptx"; string source3 = "../../Customer Content.pptx"; string source4 = "../../Presentation One.pptx"; string source5 = "../../Presentation Two.pptx"; string source6 = "../../Presentation Three.pptx"; string contoso1 = "../../Contoso One.pptx"; string contoso2 = "../../Contoso Two.pptx"; string contoso3 = "../../Contoso Three.pptx"; List <SlideSource> sources = null; var sourceDoc = new PmlDocument(source1); sources = new List <SlideSource>() { new SlideSource(sourceDoc, 0, 1, false), // Title new SlideSource(sourceDoc, 1, 1, false), // First intro (of 3) new SlideSource(sourceDoc, 4, 2, false), // Sales bios new SlideSource(sourceDoc, 9, 3, false), // Content slides new SlideSource(sourceDoc, 13, 1, false), // Closing summary }; PresentationBuilder.BuildPresentation(sources).SaveAs(Path.Combine(tempDi.FullName, "Out1.pptx")); sources = new List <SlideSource>() { new SlideSource(new PmlDocument(source2), 2, 1, true), // Choose company new SlideSource(new PmlDocument(source3), false), // Content }; PresentationBuilder.BuildPresentation(sources).SaveAs(Path.Combine(tempDi.FullName, "Out2.pptx")); sources = new List <SlideSource>() { new SlideSource(new PmlDocument(source4), true), new SlideSource(new PmlDocument(source5), true), new SlideSource(new PmlDocument(source6), true), }; PresentationBuilder.BuildPresentation(sources).SaveAs(Path.Combine(tempDi.FullName, "Out3.pptx")); sources = new List <SlideSource>() { new SlideSource(new PmlDocument(contoso1), true), new SlideSource(new PmlDocument(contoso2), true), new SlideSource(new PmlDocument(contoso3), true), }; PresentationBuilder.BuildPresentation(sources).SaveAs(Path.Combine(tempDi.FullName, "Out4.pptx")); }
public void ExtractOneSlide(string fileName, int slideNumber) { var file = Path.Combine(SourceDirectory, fileName); var document = new PmlDocument(file); var source = new SlideSource(document, slideNumber - 1, 1, true); var slide = PresentationBuilder.BuildPresentation(new List <SlideSource> { source }); slide.FileName = document.FileName.Replace(".pptx", $"_{slideNumber:000}.pptx"); slide.SaveAs(Path.Combine(TargetDirectory, Path.GetFileName(slide.FileName))); }
static void Main(string[] args) { string source1 = "../../Contoso.pptx"; string source2 = "../../Companies.pptx"; string source3 = "../../Customer Content.pptx"; string source4 = "../../Presentation One.pptx"; string source5 = "../../Presentation Two.pptx"; string source6 = "../../Presentation Three.pptx"; string contoso1 = "../../Contoso One.pptx"; string contoso2 = "../../Contoso Two.pptx"; string contoso3 = "../../Contoso Three.pptx"; List <SlideSource> sources = null; var sourceDoc = new PmlDocument(source1); sources = new List <SlideSource>() { new SlideSource(sourceDoc, 0, 1, false), // Title new SlideSource(sourceDoc, 1, 1, false), // First intro (of 3) new SlideSource(sourceDoc, 4, 2, false), // Sales bios new SlideSource(sourceDoc, 9, 3, false), // Content slides new SlideSource(sourceDoc, 13, 1, false), // Closing summary }; PresentationBuilder.BuildPresentation(sources, "Out1.pptx"); sources = new List <SlideSource>() { new SlideSource(new PmlDocument(source2), 2, 1, true), // Choose company new SlideSource(new PmlDocument(source3), false), // Content }; PresentationBuilder.BuildPresentation(sources, "Out2.pptx"); sources = new List <SlideSource>() { new SlideSource(new PmlDocument(source4), true), new SlideSource(new PmlDocument(source5), true), new SlideSource(new PmlDocument(source6), true), }; PresentationBuilder.BuildPresentation(sources, "Out3.pptx"); sources = new List <SlideSource>() { new SlideSource(new PmlDocument(contoso1), true), new SlideSource(new PmlDocument(contoso2), true), new SlideSource(new PmlDocument(contoso3), true), }; PresentationBuilder.BuildPresentation(sources, "Out4.pptx"); }
public void Sample1() { var source1 = GetFilePath("Sample1/Contoso.pptx"); var source2 = GetFilePath("Sample1/Companies.pptx"); var source3 = GetFilePath("Sample1/Customer Content.pptx"); var source4 = GetFilePath("Sample1/Presentation One.pptx"); var source5 = GetFilePath("Sample1/Presentation Two.pptx"); var source6 = GetFilePath("Sample1/Presentation Three.pptx"); var contoso1 = GetFilePath("Sample1/Contoso One.pptx"); var contoso2 = GetFilePath("Sample1/Contoso Two.pptx"); var contoso3 = GetFilePath("Sample1/Contoso Three.pptx"); var sourceDoc = new PmlDocument(source1); var sources = new List <SlideSource> { new(sourceDoc, 0, 1, false), // Title new(sourceDoc, 1, 1, false), // First intro (of 3) new(sourceDoc, 4, 2, false), // Sales bios new(sourceDoc, 9, 3, false), // Content slides new(sourceDoc, 13, 1, false), // Closing summary }; PresentationBuilder.BuildPresentation(sources).SaveAs(Path.Combine(TempDir, "Out1.pptx")); sources = new List <SlideSource> { new(new PmlDocument(source2), 2, 1, true), // Choose company new(new PmlDocument(source3), false), // Content }; PresentationBuilder.BuildPresentation(sources).SaveAs(Path.Combine(TempDir, "Out2.pptx")); sources = new List <SlideSource> { new(new PmlDocument(source4), true), new(new PmlDocument(source5), true), new(new PmlDocument(source6), true), }; PresentationBuilder.BuildPresentation(sources).SaveAs(Path.Combine(TempDir, "Out3.pptx")); sources = new List <SlideSource> { new(new PmlDocument(contoso1), true), new(new PmlDocument(contoso2), true), new(new PmlDocument(contoso3), true), }; PresentationBuilder.BuildPresentation(sources).SaveAs(Path.Combine(TempDir, "Out4.pptx")); }
public void ReassemblePresentation(string fileName) { var file = Path.Combine(SourceDirectory, fileName); var document = new PmlDocument(file); var slides = PresentationBuilder.PublishSlides(document); var sources = slides.Select(x => new SlideSource(x, true)).ToList(); var newDocument = PresentationBuilder.BuildPresentation(sources); newDocument.FileName = fileName.Replace(".pptx", "_reassembled.pptx"); newDocument.SaveAs(Path.Combine(TargetDirectory, newDocument.FileName)); var baseSize = slides.Sum(x => x.DocumentByteArray.Length); Assert.InRange(newDocument.DocumentByteArray.Length, 0.9 * baseSize, 1.1 * baseSize); }
public void PublishUsingPublishSlides(string sourcePath) { var targetDir = Path.Combine(TargetDirectory, Path.GetFileNameWithoutExtension(sourcePath)); if (Directory.Exists(targetDir)) { Directory.Delete(targetDir, true); } Directory.CreateDirectory(targetDir); var document = new PmlDocument(sourcePath); string title; DateTime?modified; using (var streamDoc = new OpenXmlMemoryStreamDocument(document)) { using var srcDoc = streamDoc.GetPresentationDocument(new OpenSettings { AutoSave = false }); title = srcDoc.PackageProperties.Title; modified = srcDoc.PackageProperties.Modified; } var sameTitle = 0; foreach (var slide in PresentationBuilder.PublishSlides(document)) { slide.SaveAs(Path.Combine(targetDir, Path.GetFileName(slide.FileName))); using var streamDoc = new OpenXmlMemoryStreamDocument(slide); using var slideDoc = streamDoc.GetPresentationDocument(new OpenSettings { AutoSave = false }); Assert.Equal(modified, slideDoc.PackageProperties.Modified); if (title.Equals(slideDoc.PackageProperties.Title)) { sameTitle++; } } Assert.InRange(sameTitle, 0, 4); }
public void CU001(string name) { FileInfo templateFile = new FileInfo(Path.Combine(TestUtil.SourceDir.FullName, name)); if (templateFile.Extension.ToLower() == ".docx") { WmlDocument wmlTemplate = new WmlDocument(templateFile.FullName); var afterUpdatingDocx = new FileInfo(Path.Combine(TestUtil.TempDir.FullName, templateFile.Name.Replace(".docx", "-processed-by-ChartUpdater.docx"))); wmlTemplate.SaveAs(afterUpdatingDocx.FullName); using (var wDoc = WordprocessingDocument.Open(afterUpdatingDocx.FullName, true)) { var chart1Data = new ChartData { SeriesNames = new[] { "Car", "Truck", "Van", "Bike", "Boat", }, CategoryDataType = ChartDataType.String, CategoryNames = new[] { "Q1", "Q2", "Q3", "Q4", }, Values = new double[][] { new double[] { 100, 310, 220, 450, }, new double[] { 200, 300, 350, 411, }, new double[] { 80, 120, 140, 600, }, new double[] { 120, 100, 140, 400, }, new double[] { 200, 210, 210, 480, }, }, }; ChartUpdater.UpdateChart(wDoc, "Chart1", chart1Data); var chart2Data = new ChartData { SeriesNames = new[] { "Series" }, CategoryDataType = ChartDataType.String, CategoryNames = new[] { "Cars", "Trucks", "Vans", "Boats", }, Values = new double[][] { new double[] { 320, 112, 64, 80, }, }, }; ChartUpdater.UpdateChart(wDoc, "Chart2", chart2Data); var chart3Data = new ChartData { SeriesNames = new[] { "X1", "X2", "X3", "X4", "X5", "X6", }, CategoryDataType = ChartDataType.String, CategoryNames = new[] { "Y1", "Y2", "Y3", "Y4", "Y5", "Y6", }, Values = new double[][] { new double[] { 3.0, 2.1, .7, .7, 2.1, 3.0, }, new double[] { 3.0, 2.1, .8, .8, 2.1, 3.0, }, new double[] { 3.0, 2.4, 1.2, 1.2, 2.4, 3.0, }, new double[] { 3.0, 2.7, 1.7, 1.7, 2.7, 3.0, }, new double[] { 3.0, 2.9, 2.5, 2.5, 2.9, 3.0, }, new double[] { 3.0, 3.0, 3.0, 3.0, 3.0, 3.0, }, }, }; ChartUpdater.UpdateChart(wDoc, "Chart3", chart3Data); var chart4Data = new ChartData { SeriesNames = new[] { "Car", "Truck", "Van", }, CategoryDataType = ChartDataType.DateTime, CategoryFormatCode = 14, CategoryNames = new[] { ToExcelInteger(new DateTime(2013, 9, 1)), ToExcelInteger(new DateTime(2013, 9, 2)), ToExcelInteger(new DateTime(2013, 9, 3)), ToExcelInteger(new DateTime(2013, 9, 4)), ToExcelInteger(new DateTime(2013, 9, 5)), ToExcelInteger(new DateTime(2013, 9, 6)), ToExcelInteger(new DateTime(2013, 9, 7)), ToExcelInteger(new DateTime(2013, 9, 8)), ToExcelInteger(new DateTime(2013, 9, 9)), ToExcelInteger(new DateTime(2013, 9, 10)), ToExcelInteger(new DateTime(2013, 9, 11)), ToExcelInteger(new DateTime(2013, 9, 12)), ToExcelInteger(new DateTime(2013, 9, 13)), ToExcelInteger(new DateTime(2013, 9, 14)), ToExcelInteger(new DateTime(2013, 9, 15)), ToExcelInteger(new DateTime(2013, 9, 16)), ToExcelInteger(new DateTime(2013, 9, 17)), ToExcelInteger(new DateTime(2013, 9, 18)), ToExcelInteger(new DateTime(2013, 9, 19)), ToExcelInteger(new DateTime(2013, 9, 20)), }, Values = new double[][] { new double[] { 1, 2, 3, 2, 3, 4, 5, 4, 5, 6, 5, 4, 5, 6, 7, 8, 7, 8, 8, 9, }, new double[] { 2, 3, 3, 4, 4, 5, 6, 7, 8, 7, 8, 9, 9, 9, 7, 8, 9, 9, 10, 11, }, new double[] { 2, 3, 3, 3, 3, 2, 2, 2, 3, 2, 3, 3, 4, 4, 4, 3, 4, 5, 5, 4, }, }, }; ChartUpdater.UpdateChart(wDoc, "Chart4", chart4Data); } } if (templateFile.Extension.ToLower() == ".pptx") { PmlDocument pmlTemplate = new PmlDocument(templateFile.FullName); var afterUpdatingPptx = new FileInfo(Path.Combine(TestUtil.TempDir.FullName, templateFile.Name.Replace(".pptx", "-processed-by-ChartUpdater.pptx"))); pmlTemplate.SaveAs(afterUpdatingPptx.FullName); using (var pDoc = PresentationDocument.Open(afterUpdatingPptx.FullName, true)) { var chart1Data = new ChartData { SeriesNames = new[] { "Car", "Truck", "Van", }, CategoryDataType = ChartDataType.String, CategoryNames = new[] { "Q1", "Q2", "Q3", "Q4", }, Values = new double[][] { new double[] { 320, 310, 320, 330, }, new double[] { 201, 224, 230, 221, }, new double[] { 180, 200, 220, 230, }, }, }; ChartUpdater.UpdateChart(pDoc, 1, chart1Data); } } }
public void Sample2() { var presentation = GetFilePath("Sample2/Presentation1.pptx"); var hiddenPresentation = GetFilePath("Sample2/HiddenPresentation.pptx"); // First, load both presentations into byte arrays, simulating retrieving presentations from some source // such as a SharePoint server var baPresentation = File.ReadAllBytes(presentation); var baHiddenPresentation = File.ReadAllBytes(hiddenPresentation); // Next, replace "thee" with "the" in the main presentation var pmlMainPresentation = new PmlDocument("Main.pptx", baPresentation); PmlDocument modifiedMainPresentation; using (var streamDoc = new OpenXmlMemoryStreamDocument(pmlMainPresentation)) { using (var document = streamDoc.GetPresentationDocument()) { var pXDoc = document.PresentationPart.GetXDocument(); foreach (var slideId in pXDoc.Root.Elements(P.sldIdLst).Elements(P.sldId)) { var slideRelId = (string)slideId.Attribute(R.id); var slidePart = document.PresentationPart.GetPartById(slideRelId); var slideXDoc = slidePart.GetXDocument(); var paragraphs = slideXDoc.Descendants(A.p).ToList(); OpenXmlRegex.Replace(paragraphs, new Regex("thee"), "the", null); slidePart.PutXDocument(); } } modifiedMainPresentation = streamDoc.GetModifiedPmlDocument(); } // Combine the two presentations into a single presentation var slideSources = new List <SlideSource> { new(modifiedMainPresentation, 0, 1, true), new(new PmlDocument("Hidden.pptx", baHiddenPresentation), true), new(modifiedMainPresentation, 1, true), }; var combinedPresentation = PresentationBuilder.BuildPresentation(slideSources); // Replace <# TRADEMARK #> with AdventureWorks (c) PmlDocument modifiedCombinedPresentation; using (var streamDoc = new OpenXmlMemoryStreamDocument(combinedPresentation)) { using (var document = streamDoc.GetPresentationDocument()) { var pXDoc = document.PresentationPart.GetXDocument(); foreach (var slideId in pXDoc.Root.Elements(P.sldIdLst).Elements(P.sldId).Skip(1).Take(1)) { var slideRelId = (string)slideId.Attribute(R.id); var slidePart = document.PresentationPart.GetPartById(slideRelId); var slideXDoc = slidePart.GetXDocument(); var paragraphs = slideXDoc.Descendants(A.p).ToList(); OpenXmlRegex.Replace(paragraphs, new Regex("<# TRADEMARK #>"), "AdventureWorks (c)", null); slidePart.PutXDocument(); } } modifiedCombinedPresentation = streamDoc.GetModifiedPmlDocument(); } // we now have a PmlDocument (which is essentially a byte array) that can be saved as necessary. modifiedCombinedPresentation.SaveAs(Path.Combine(TempDir, "ModifiedCombinedPresentation.pptx")); }
static void Main(string[] args) { var n = DateTime.Now; var tempDi = new DirectoryInfo(string.Format("ExampleOutput-{0:00}-{1:00}-{2:00}-{3:00}{4:00}{5:00}", n.Year - 2000, n.Month, n.Day, n.Hour, n.Minute, n.Second)); tempDi.Create(); string presentation = "../../Presentation1.pptx"; string hiddenPresentation = "../../HiddenPresentation.pptx"; // First, load both presentations into byte arrays, simulating retrieving presentations from some source // such as a SharePoint server var baPresentation = File.ReadAllBytes(presentation); var baHiddenPresentation = File.ReadAllBytes(hiddenPresentation); // Next, replace "thee" with "the" in the main presentation var pmlMainPresentation = new PmlDocument("Main.pptx", baPresentation); PmlDocument modifiedMainPresentation = null; using (OpenXmlMemoryStreamDocument streamDoc = new OpenXmlMemoryStreamDocument(pmlMainPresentation)) { using (PresentationDocument document = streamDoc.GetPresentationDocument()) { var pXDoc = document.PresentationPart.GetXDocument(); foreach (var slideId in pXDoc.Root.Elements(P.sldIdLst).Elements(P.sldId)) { var slideRelId = (string)slideId.Attribute(R.id); var slidePart = document.PresentationPart.GetPartById(slideRelId); var slideXDoc = slidePart.GetXDocument(); var paragraphs = slideXDoc.Descendants(A.p).ToList(); OpenXmlRegex.Replace(paragraphs, new Regex("thee"), "the", null); slidePart.PutXDocument(); } } modifiedMainPresentation = streamDoc.GetModifiedPmlDocument(); } // Combine the two presentations into a single presentation var slideSources = new List <SlideSource>() { new SlideSource(modifiedMainPresentation, 0, 1, true), new SlideSource(new PmlDocument("Hidden.pptx", baHiddenPresentation), true), new SlideSource(modifiedMainPresentation, 1, true), }; PmlDocument combinedPresentation = PresentationBuilder.BuildPresentation(slideSources); // Replace <# TRADEMARK #> with AdventureWorks (c) PmlDocument modifiedCombinedPresentation = null; using (OpenXmlMemoryStreamDocument streamDoc = new OpenXmlMemoryStreamDocument(combinedPresentation)) { using (PresentationDocument document = streamDoc.GetPresentationDocument()) { var pXDoc = document.PresentationPart.GetXDocument(); foreach (var slideId in pXDoc.Root.Elements(P.sldIdLst).Elements(P.sldId).Skip(1).Take(1)) { var slideRelId = (string)slideId.Attribute(R.id); var slidePart = document.PresentationPart.GetPartById(slideRelId); var slideXDoc = slidePart.GetXDocument(); var paragraphs = slideXDoc.Descendants(A.p).ToList(); OpenXmlRegex.Replace(paragraphs, new Regex("<# TRADEMARK #>"), "AdventureWorks (c)", null); slidePart.PutXDocument(); } } modifiedCombinedPresentation = streamDoc.GetModifiedPmlDocument(); } // we now have a PmlDocument (which is essentially a byte array) that can be saved as necessary. modifiedCombinedPresentation.SaveAs(Path.Combine(tempDi.FullName, "Modified.pptx")); }
public static IList <PmlDocument> PublishSlides(PmlDocument src) { using var streamSrcDoc = new OpenXmlMemoryStreamDocument(src); using var srcDoc = streamSrcDoc.GetPresentationDocument(new OpenSettings { AutoSave = false }); return(PublishSlides(srcDoc, src.FileName).ToList()); }