Exemplo n.º 1
0
        /**
          <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);}
              }
        }
Exemplo n.º 2
0
        /**
         * <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);
                }
            }
        }