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;
 }