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