code: static public String getDictionaryDetail(PdfDictionary dic, int depth){
          StringBuffer builder = new StringBuffer();
          builder.append('(');
          List subDictionaries = new ArrayList();
          for (Iterator i = dic.getKeys().iterator(); i.hasNext(); ) {
              PdfName key = (PdfName)i.next();
              PdfObject val = dic.getDirectObject(key);
              if (val.isDictionary())
                  subDictionaries.add(key);
              builder.append(key);
              builder.append('=');
              builder.append(val);
              builder.append(", ");
          }
          builder.setLength(builder.length()-2);
          builder.append(')');
          PdfName pdfSubDictionaryName;
          for (Iterator it = subDictionaries.iterator(); it.hasNext(); ) {
          	pdfSubDictionaryName = (PdfName)it.next();
              builder.append('\n');
              for(int i = 0; i < depth+1; i++){
                  builder.append('\t');
              }
              builder.append("Subdictionary ");
              builder.append(pdfSubDictionaryName);
              builder.append(" = ");
              builder.append(getDictionaryDetail(dic.getAsDict(pdfSubDictionaryName), depth+1));
          }
          return builder.toString();
      }
docs: Shows the detail of a dictionary.
  @param dic	the dictionary of which you want the detail
  @param depth	the depth of the current dictionary (for nested dictionaries)
  @return	a String representation of the dictionary