public static void GetCustomPartData(string filename) { using (PresentationDocument pdoc = PresentationDocument.Open(filename, isEditable: true)) { //XDocument xd = slide.GetXDocument(); List <OpenXmlPart> openXmlParts = pdoc.GetAllParts(); //所有幻灯片<sld> 元素 对应uri:/ppt/slides IEnumerable <SlidePart> slideParts = pdoc.PresentationPart.SlideParts; var slideText = GetSlideIdAndText(pdoc); } }
public static void FixUpPresentationDocument(PresentationDocument pDoc) { foreach (var part in pDoc.GetAllParts()) { if (part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.slide+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.theme+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.drawingml.chart+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml" || part.ContentType == "application/vnd.ms-office.drawingml.diagramDrawing+xml") { XDocument xd = part.GetXDocument(); xd.Descendants().Attributes("smtClean").Remove(); xd.Descendants().Attributes("smtId").Remove(); part.PutXDocument(); } if (part.ContentType == "application/vnd.openxmlformats-officedocument.vmlDrawing") { string fixedContent = null; using (var stream = part.GetStream(FileMode.Open, FileAccess.ReadWrite)) { using (var sr = new StreamReader(stream)) { //string input = @" <![if gte mso 9]><v:imagedata o:relid=""rId15"""; var input = sr.ReadToEnd(); string pattern = @"<!\[(?<test>.*)\]>"; //string replacement = "<![CDATA[${test}]]>"; //fixedContent = Regex.Replace(input, pattern, replacement, RegexOptions.Multiline); fixedContent = Regex.Replace(input, pattern, m => { var g = m.Groups[1].Value; if (g.StartsWith("CDATA[")) return "<![" + g + "]>"; else return "<![CDATA[" + g + "]]>"; }, RegexOptions.Multiline); //var input = @"xxxxx o:relid=""rId1"" o:relid=""rId1"" xxxxx"; pattern = @"o:relid=[""'](?<id1>.*)[""'] o:relid=[""'](?<id2>.*)[""']"; fixedContent = Regex.Replace(fixedContent, pattern, m => { var g = m.Groups[1].Value; return @"o:relid=""" + g + @""""; }, RegexOptions.Multiline); fixedContent = fixedContent.Replace("</xml>ml>", "</xml>"); stream.SetLength(fixedContent.Length); } } using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(fixedContent))) part.FeedData(ms); } } }
public static void FixUpPresentationDocument(PresentationDocument pDoc) { foreach (OpenXmlPart part in pDoc.GetAllParts()) { if (part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.slide+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.theme+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.drawingml.chart+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml" || part.ContentType == "application/vnd.ms-office.drawingml.diagramDrawing+xml") { XDocument xd = part.GetXDocument(); xd.Descendants().Attributes("smtClean").Remove(); xd.Descendants().Attributes("smtId").Remove(); part.PutXDocument(); } if (part.ContentType == "application/vnd.openxmlformats-officedocument.vmlDrawing") { string fixedContent = null; using (Stream stream = part.GetStream(FileMode.Open, FileAccess.ReadWrite)) { using (var sr = new StreamReader(stream)) { //string input = @" <![if gte mso 9]><v:imagedata o:relid=""rId15"""; string input = sr.ReadToEnd(); var pattern = @"<!\[(?<test>.*)\]>"; //string replacement = "<![CDATA[${test}]]>"; //fixedContent = Regex.Replace(input, pattern, replacement, RegexOptions.Multiline); fixedContent = Regex.Replace(input, pattern, m => { string g = m.Groups[1].Value; if (g.StartsWith("CDATA[")) { return("<![" + g + "]>"); } return("<![CDATA[" + g + "]]>"); }, RegexOptions.Multiline); //var input = @"xxxxx o:relid=""rId1"" o:relid=""rId1"" xxxxx"; pattern = @"o:relid=[""'](?<id1>.*)[""'] o:relid=[""'](?<id2>.*)[""']"; fixedContent = Regex.Replace(fixedContent, pattern, m => { string g = m.Groups[1].Value; return(@"o:relid=""" + g + @""""); }, RegexOptions.Multiline); fixedContent = fixedContent.Replace("</xml>ml>", "</xml>"); stream.SetLength(fixedContent.Length); } } using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(fixedContent))) part.FeedData(ms); } } }
private static void BuildPresentation(List<SlideSource> sources, PresentationDocument output) { if (RelationshipMarkup == null) RelationshipMarkup = new Dictionary<XName, XName[]>() { { A.audioFile, new [] { R.link }}, { A.videoFile, new [] { R.link }}, { A.quickTimeFile, new [] { R.link }}, { A.wavAudioFile, new [] { R.embed }}, { A.blip, new [] { R.embed, R.link }}, { A.hlinkClick, new [] { R.id }}, { A.hlinkMouseOver, new [] { R.id }}, { A.hlinkHover, new [] { R.id }}, { A.relIds, new [] { R.cs, R.dm, R.lo, R.qs }}, { C.chart, new [] { R.id }}, { C.externalData, new [] { R.id }}, { C.userShapes, new [] { R.id }}, { DGM.relIds, new [] { R.cs, R.dm, R.lo, R.qs }}, { A14.imgLayer, new [] { R.embed }}, { P14.media, new [] { R.embed, R.link }}, { P.oleObj, new [] { R.id }}, { P.externalData, new [] { R.id }}, { P.control, new [] { R.id }}, { P.snd, new [] { R.embed }}, { P.sndTgt, new [] { R.embed }}, { PAV.srcMedia, new [] { R.embed, R.link }}, { P.contentPart, new [] { R.id }}, { VML.fill, new [] { R.id }}, { VML.imagedata, new [] { R.href, R.id, R.pict, O.relid }}, { VML.stroke, new [] { R.id }}, { WNE.toolbarData, new [] { R.id }}, { Plegacy.textdata, new [] { XName.Get("id") }}, }; List<ImageData> images = new List<ImageData>(); List<MediaData> mediaList = new List<MediaData>(); XDocument mainPart = output.PresentationPart.GetXDocument(); mainPart.Declaration.Standalone = "yes"; mainPart.Declaration.Encoding = "UTF-8"; output.PresentationPart.PutXDocument(); int sourceNum = 0; SlideMasterPart currentMasterPart = null; foreach (SlideSource source in sources) { using (OpenXmlMemoryStreamDocument streamDoc = new OpenXmlMemoryStreamDocument(source.PmlDocument)) using (PresentationDocument doc = streamDoc.GetPresentationDocument()) { try { if (sourceNum == 0) CopyPresentationParts(doc, output, images, mediaList); currentMasterPart = AppendSlides(doc, output, source.Start, source.Count, source.KeepMaster, images, currentMasterPart, mediaList); } catch (PresentationBuilderInternalException dbie) { if (dbie.Message.Contains("{0}")) throw new PresentationBuilderException(string.Format(dbie.Message, sourceNum)); else throw dbie; } } sourceNum++; } foreach (var part in output.GetAllParts()) { if (part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.slide+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.presentationml.handoutMaster+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.theme+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.drawingml.chart+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml" || part.ContentType == "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml" || part.ContentType == "application/vnd.ms-office.drawingml.diagramDrawing+xml") { XDocument xd = part.GetXDocument(); xd.Descendants().Attributes("smtClean").Remove(); part.PutXDocument(); } else if (part.Annotation<XDocument>() != null) part.PutXDocument(); } }