private void DoSomethingToContentPartsRecursively(OPCPackage package, PartInfo part, PartProcessingDelegate whatToDo) { using (Stream data = part.GetContent()) { whatToDo(data, part); } foreach (PartInfo pi in part.GetRelatedObjects()) { DoSomethingToContentPartsRecursively(package, pi, whatToDo); } }
private void TryLoadRelationships(PartInfo forPart) { string sRelRoot = forPart.AbsolutePath(); if (m_partsMap.ContainsKey(sRelRoot)) { // already been here by some other path // However, need to add the related objects to forPart, which is a copy of the object in the map, because sorting in // the part filter may change the order in which we retrieve things from the relationship tree // Slides have circular relationships in the pptx files so watch that if we re-write this to use the mapped objets List<PartInfo> pliRels = m_partsMap[sRelRoot].GetRelatedObjects(); foreach (PartInfo rpi in pliRels) { forPart.AddRelatedItem(rpi); } return; } m_partsMap[sRelRoot] = forPart; using (Stream str = GetPartContent(BuildRelationshipPartName(sRelRoot))) { if (str == null) return; forPart.LoadRelationships(str); foreach (PartInfo part in forPart.GetRelatedObjects()) { if (!part.External) TryLoadRelationships(part); } } }