How to read Type3 fonts using PDFTron PDFNet SDK?

Q: I have some Type3 woes. It would be great if you could clarify the
following questions/issues.

a. Bold
    In the doc you sent. The Type3 font "Mishawaka". I can't detect if
this is in bold:.

    My normal 3 tests don't seem to work. How else can I detect it!
    1. font.IsForceBold(); //returns false

    2. not font desc exists
        pdftron::SDF::Obj* pFontDesc = pfont->GetDescriptor();
        if (pFontDesc == NULL)
        {
            return; // If null, the font is not ebedded
        }

    3. and using the font name to detect bold

b. Char info
    In the file enclosed the first 2 lines are using type3 font. I
can't get the character information and the font size. I have
implemented the recursive ProcessElement but I never seems to get the
info needed.

c. Type3 in general
    I have implemented the recursive ProcessElement system however when
the (sub) elements are process I don't seems to get anything useful out
of them. What should I expect to get these child element?

d. Type3Font name
    This is not very important at all: The doc you send has that
"Mishawaka" font. Can I get the name from the doc?
----

A:

Type3 fonts are a bit weird and are different from other types of PDF
fonts (e.g. Type1, TrueType, CFF, CIDFonts, etc).

In this case it is not possible to quickly find whether the font is
bold (short of OCR or similar). The same applies to the font name.
"Mishawaka" is spelled out on the page, however the font dictionary
does not contain this information.

You could read Type3 Font information as follows.

----
CharIterator itr = element->CharBegin();
CharIterator end = element->CharEnd();
GState* gs = element->GetGState();
PDF::Font font = gs->GetFont();

double font_size = gs->GetFontSize();
double horiz_spacing = gs->GetHorizontalScale() / 100.0;
Matrix2D font_mtx(font_size * horiz_spacing, 0, 0, font_size, 0, 0);
const Matrix2D& ctm = element->GetCTM();

if (font.GetType() == Font::e_Type3) {
  Matrix2D prev_mtx(mtx * ctm * element->GetTextMatrix());
  font_mtx *= font.GetType3FontMatrix();

  for (; itr!=end; ++itr) {
    if (SDF::Obj* font_stm = font.GetType3GlyphStream(itr->char_code))
{
     Matrix2D pos(1, 0, 0, 1, itr->x, itr->y);
  Matrix2D gl_mtx(prev_mtx * pos * font_mtx);
  m_reader.Type3FontBegin(font_stm, font.GetSDFObj());
  ProcessElements(gl_mtx);
      m_reader.End();
  }
}