Exemplo n.º 1
0
 /**
  * <summary>Gets the stream body.</summary>
  * <param name="decode">Defines whether the body has to be decoded.</param>
  */
 public IBuffer GetBody(
     bool decode
     )
 {
     if (!bodyResolved)
     {
         /*
          * NOTE: In case of stream data from external file, a copy to the local buffer has to be done.
          */
         FileSpecification dataFile = DataFile;
         if (dataFile != null)
         {
             Updateable = false;
             body.SetLength(0);
             body.Write(dataFile.GetInputStream());
             body.Dirty = false;
             Updateable = true;
         }
         bodyResolved = true;
     }
     if (decode)
     {
         PdfDataObject filter = Filter;
         if (filter != null) // Stream encoded.
         {
             header.Updateable = false;
             PdfDataObject parameters = Parameters;
             if (filter is PdfName) // Single filter.
             {
                 body.Decode(
                     bytes.filters.Filter.Get((PdfName)filter),
                     (PdfDictionary)parameters
                     );
             }
             else // Multiple filters.
             {
                 IEnumerator <PdfDirectObject> filterIterator     = ((PdfArray)filter).GetEnumerator();
                 IEnumerator <PdfDirectObject> parametersIterator = (parameters != null ? ((PdfArray)parameters).GetEnumerator() : null);
                 while (filterIterator.MoveNext())
                 {
                     PdfDictionary filterParameters;
                     if (parametersIterator == null)
                     {
                         filterParameters = null;
                     }
                     else
                     {
                         parametersIterator.MoveNext();
                         filterParameters = (PdfDictionary)Resolve(parametersIterator.Current);
                     }
                     body.Decode(bytes.filters.Filter.Get((PdfName)Resolve(filterIterator.Current)), filterParameters);
                 }
             }
             Filter            = null; // The stream is free from encodings.
             header.Updateable = true;
         }
     }
     return(body);
 }