How can I fetch application specific 'PieceInfo' dictionary containing private data?

Q: We would like to read a PDF file that contains Private objects
( inserted by another application in page dictionary). I am not sure
how to retrieve the Blocks dictionary object from the Private
dictionary as shown below in the PDF.

11 0 obj
<<
/Type /Page
/Parent 3 0 R
/Resources << /ColorSpace << /CS0 12 0 R /CS1 13 0 R >> /ExtGState << /
GS0 22 0 R /GS1 26 0 R /GS2 27 0 R /GS3 31 0 R >>
/Font << /T1_0 17 0 R >> /ProcSet [ /PDF /Text ] >>
/Contents 14 0 R
/TrimBox [ 0 0 241 153 ]
/PieceInfo << /PDFlib 32 0 R >>
/MediaBox [ 0 0 241 153 ]
/CropBox [ 0 0 241 153 ]
/Rotate 0

32 0 obj
<< /Private << /Blocks << ... >> >>
/version 1

----
A: We are able to obtain the Blocks dictionary object from the Private
dictionary. The problem is that Private dictionary was not fetched
correctly (you can simply use dict.findObj("Private") instead of
trying to manually get the object from the document).

// Assuming Java (C# / C++ is similar - the only difference is method
casing)
try
{
System.out.println("finding the private SDF object...");
PDFDoc doc = new PDFDoc((input_path));
doc.initSecurityHandler();

int pgnum = doc.getPageCount();
PageIterator page_begin = doc.getPageIterator();

PageIterator itr;

for (itr = page_begin; itr.hasNext(); ) // Read every page
{

  Page pageobj = (Page)itr.next();
  Obj page_sdfobj = (Obj)pageobj.getSDFObj();
  // Process each page

  DictIterator pieceinfo_itr = page_sdfobj.find("PieceInfo");
  if (pieceinfo_itr.hasNext())
  {
   System.out.println("found PieceInfo");
   Obj pieceinfo_dict_obj = (Obj)pieceinfo_itr.value();

   Obj pdflib_obj = pieceinfo_dict_obj.findObj("PDFlib");
   if (pdflib_obj != null)
   {
    long pdflib_num = pdflib_obj.getObjNum();
    System.out.println("found PDFLib object" + pdflib_num);

    Obj prvt_obj = pdflib_obj.findObj("Private");
    if (prvt_obj != null)
    {
     Obj Blk_dict = prvt_obj.findObj("Blocks");
     if (Blk_dict == null)
     {
      System.out.println("no block dictionary");
     }
    }
    else
    {
     System.out.println("No private dictionary");
    }
   }
  }
}
}
catch (Exception e)
{
System.out.println(e);
}