/** Creates a new instance of PDFFontDescriptor */
  public PDFFontDescriptor(PDFObject obj) throws IOException {
    // required parameters
    setAscent(obj.getDictRef("Ascent").getIntValue());
    setCapHeight(obj.getDictRef("CapHeight").getIntValue());
    setDescent(obj.getDictRef("Descent").getIntValue());
    setFlags(obj.getDictRef("Flags").getIntValue());
    setFontName(obj.getDictRef("FontName").getStringValue());
    setItalicAngle(obj.getDictRef("ItalicAngle").getIntValue());
    setStemV(obj.getDictRef("StemV").getIntValue());

    // font bounding box
    PDFObject[] bboxdef = obj.getDictRef("FontBBox").getArray();
    float[] bboxfdef = new float[4];
    for (int i = 0; i < 4; i++) {
      bboxfdef[i] = bboxdef[i].getFloatValue();
    }
    setFontBBox(
        new Rectangle2D.Float(
            bboxfdef[0], bboxfdef[1], bboxfdef[2] - bboxfdef[0], bboxfdef[3] - bboxfdef[1]));

    // optional parameters
    if (obj.getDictionary().containsKey("AvgWidth")) {
      setAvgWidth(obj.getDictRef("AvgWidth").getIntValue());
    }
    if (obj.getDictionary().containsKey("FontFile")) {
      setFontFile(obj.getDictRef("FontFile"));
    }
    if (obj.getDictionary().containsKey("FontFile2")) {
      setFontFile2(obj.getDictRef("FontFile2"));
    }
    if (obj.getDictionary().containsKey("FontFile3")) {
      setFontFile3(obj.getDictRef("FontFile3"));
    }
    if (obj.getDictionary().containsKey("Leading")) {
      setLeading(obj.getDictRef("Leading").getIntValue());
    }
    if (obj.getDictionary().containsKey("MaxWidth")) {
      setMaxWidth(obj.getDictRef("MaxWidth").getIntValue());
    }
    if (obj.getDictionary().containsKey("MissingWidth")) {
      setMissingWidth(obj.getDictRef("MissingWidth").getIntValue());
    }
    if (obj.getDictionary().containsKey("StemH")) {
      setStemH(obj.getDictRef("StemH").getIntValue());
    }
    if (obj.getDictionary().containsKey("XHeight")) {
      setXHeight(obj.getDictRef("XHeight").getIntValue());
    }
    if (obj.getDictionary().containsKey("CharSet")) {
      setCharSet(obj.getDictRef("CharSet"));
    }
    if (obj.getDictionary().containsKey("FontFamily")) {
      setFontFamily(obj.getDictRef("FontFamily").getStringValue());
    }
    if (obj.getDictionary().containsKey("FontWeight")) {
      setFontWeight(obj.getDictRef("FontWeight").getIntValue());
    }
    if (obj.getDictionary().containsKey("FontStretch")) {
      setFontStretch(obj.getDictRef("FontStretch").getStringValue());
    }
  }