public static byte[] GetStreamBytes(PRStream stream, RandomAccessFileOrArray file) {
PdfObject filter = GetPdfObjectRelease(stream.Get(PdfName.FILTER));
byte[] b = GetStreamBytesRaw(stream, file);
ArrayList filters = new ArrayList();
if (filter != null) {
if (filter.IsName())
filters.Add(filter);
else if (filter.IsArray())
filters = ((PdfArray)filter).ArrayList;
}
ArrayList dp = new ArrayList();
PdfObject dpo = GetPdfObjectRelease(stream.Get(PdfName.DECODEPARMS));
if (dpo == null || (!dpo.IsDictionary() && !dpo.IsArray()))
dpo = GetPdfObjectRelease(stream.Get(PdfName.DP));
if (dpo != null) {
if (dpo.IsDictionary())
dp.Add(dpo);
else if (dpo.IsArray())
dp = ((PdfArray)dpo).ArrayList;
}
String name;
for (int j = 0; j < filters.Count; ++j) {
name = ((PdfName)GetPdfObjectRelease((PdfObject)filters[j])).ToString();
if (name.Equals("/FlateDecode") || name.Equals("/Fl")) {
b = FlateDecode(b);
PdfObject dicParam = null;
if (j < dp.Count) {
dicParam = (PdfObject)dp[j];
b = DecodePredictor(b, dicParam);
}
}
else if (name.Equals("/ASCIIHexDecode") || name.Equals("/AHx"))
b = ASCIIHexDecode(b);
else if (name.Equals("/ASCII85Decode") || name.Equals("/A85"))
b = ASCII85Decode(b);
else if (name.Equals("/LZWDecode")) {
b = LZWDecode(b);
PdfObject dicParam = null;
if (j < dp.Count) {
dicParam = (PdfObject)dp[j];
b = DecodePredictor(b, dicParam);
}
}
else if (name.Equals("/Crypt")) {
}
else
throw new UnsupportedPdfException("The filter " + name + " is not supported.");
}
return b;
}