/** Get the content from a stream as it is without applying any filter.
* @param stream the stream
* @param file the location where the stream is
* @throws IOException on error
* @return the stream content
*/
public static byte[] GetStreamBytesRaw(PRStream stream, RandomAccessFileOrArray file) {
PdfReader reader = stream.Reader;
byte[] b;
if (stream.Offset < 0)
b = stream.GetBytes();
else {
b = new byte[stream.Length];
file.Seek(stream.Offset);
file.ReadFully(b);
PdfEncryption decrypt = reader.Decrypt;
if (decrypt != null) {
PdfObject filter = GetPdfObjectRelease(stream.Get(PdfName.FILTER));
List<PdfObject> filters = new List<PdfObject>();
if (filter != null) {
if (filter.IsName())
filters.Add(filter);
else if (filter.IsArray())
filters = ((PdfArray)filter).ArrayList;
}
bool skip = false;
for (int k = 0; k < filters.Count; ++k) {
PdfObject obj = GetPdfObjectRelease(filters[k]);
if (obj != null && obj.ToString().Equals("/Crypt")) {
skip = true;
break;
}
}
if (!skip) {
decrypt.SetHashKey(stream.ObjNum, stream.ObjGen);
b = decrypt.DecryptByteArray(b);
}
}
}
return b;
}