static private PdfTypeArray ConvertContentsToArray(PdfTypeBase contents, PdfIndirectList list, PdfTypeDictionary pageDict)
 {
     //check the original content whether it's an array
     if (contents is PdfTypeArray)
     {
         return(contents as PdfTypeArray);     //if contents is a array just return it
     }
     else if (contents is PdfTypeIndirect)
     {
         if ((contents as PdfTypeIndirect).Direct is PdfTypeArray)
         {
             return((contents as PdfTypeIndirect).Direct as PdfTypeArray);    //if contents is a reference to array then return that array
         }
         else if ((contents as PdfTypeIndirect).Direct is PdfTypeStream)
         {
             //if contents is a reference to a stream then create a new array and insert stream as a first element of array
             var array = PdfTypeArray.Create();
             array.AddIndirect(list, (contents as PdfTypeIndirect).Direct);
             //Add array into list of indirect objects
             list.Add(array);
             //And set it as a contents of the page
             pageDict.SetIndirectAt("Contents", list, array);
             return(array);
         }
         else
         {
             throw new Exception("Unexcpected content type");
         }
     }
     else
     {
         throw new Exception("Unexcpected content type");
     }
 }
    static private void InsertIntoDictionary(PdfDocument doc, PdfPage page, PdfImageObject image)
    {
        //Get page dictionary, list of indirect objects and original page content
        var pageDict = page.Dictionary;
        var list     = PdfIndirectList.FromPdfDocument(doc);
        //Convert contents to array.
        PdfTypeArray array = ConvertContentsToArray(pageDict["Contents"], list, pageDict);
        //Get stream of image.
        IntPtr streamHandle = Pdfium.FPDFImageObj_GenerateStream(image.Handle, page.Handle);
        var    stream       = PdfTypeStream.Create(streamHandle);
        //Add image's stream into list of indirect objects and then add it to array.
        int num = list.Add(stream);

        array.AddIndirect(list, num);
    }