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);
            }

        }
Example #2
0
        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);
                }
            }
        }