private byte[] ReadContentBytes( PdfObject contentObject) { byte[] result; switch (contentObject.Type) { case PdfObject.INDIRECT: PRIndirectReference reference = (PRIndirectReference)contentObject; PdfObject directObject = PdfReader.GetPdfObject(reference); result = ReadContentBytes(directObject); break; case PdfObject.STREAM: PRStream stream = (PRStream)PdfReader.GetPdfObject(contentObject); result = PdfReader.GetStreamBytes(stream); break; case PdfObject.ARRAY: // Stitch together all content before calling processContent(), because // processContent() resets state. MemoryStream allBytes = new MemoryStream(); PdfArray contentArray = (PdfArray)contentObject; ListIterator<PdfObject> iter = contentArray.GetListIterator(); while (iter.HasNext()) { PdfObject element = iter.Next(); byte[] bytes = ReadContentBytes(element); allBytes.Write(bytes, 0, bytes.Length); } result = allBytes.ToArray(); break; default: String msg = "Unable to handle Content of type " + contentObject.GetType(); throw new InvalidOperationException(msg); } return result; }