/** <summary>Removes indirect objects which have no reference in the document structure.</summary> <param name="file">File to optimize.</param> */ public static void RemoveOrphanedObjects( File file ) { // 1. Collecting alive indirect objects... ISet<int> aliveObjectNumbers = new HashSet<int>(); { // Alive indirect objects collector. IVisitor visitor = new AliveObjectCollector(aliveObjectNumbers); // Walk through the document structure to collect alive indirect objects! file.Trailer.Accept(visitor, null); } // 2. Removing orphaned indirect objects... IndirectObjects indirectObjects = file.IndirectObjects; for(int objectNumber = 0, objectCount = indirectObjects.Count; objectNumber < objectCount; objectNumber++) { if(!aliveObjectNumbers.Contains(objectNumber)) {indirectObjects.RemoveAt(objectNumber);} } }
/** * <summary>Removes indirect objects which have no reference in the document structure.</summary> * <param name="file">File to optimize.</param> */ public static void RemoveOrphanedObjects( File file ) { // 1. Collecting alive indirect objects... ISet <int> aliveObjectNumbers = new HashSet <int>(); { // Alive indirect objects collector. IVisitor visitor = new AliveObjectCollector(aliveObjectNumbers); // Walk through the document structure to collect alive indirect objects! file.Trailer.Accept(visitor, null); } // 2. Removing orphaned indirect objects... IndirectObjects indirectObjects = file.IndirectObjects; for (int objectNumber = 0, objectCount = indirectObjects.Count; objectNumber < objectCount; objectNumber++) { if (!aliveObjectNumbers.Contains(objectNumber)) { indirectObjects.RemoveAt(objectNumber); } } }