public static DataDisplayTable listFontMetrics(Font font){
  String[] header={"Name","Value"};
  Align[] displayAlignment={Align.Left,Align.Left};
  DataDisplayTable table=new DataDisplayTable(Arrays.asList(header));
  table.setAlignment(Arrays.asList(displayAlignment));
  FontHeaderTable headTable=(FontHeaderTable)FontUtils.getTable(font,Tag.head);
  HorizontalHeaderTable hheaTable=(HorizontalHeaderTable)FontUtils.getTable(font,Tag.hhea);
  OS2Table os2Table=(OS2Table)FontUtils.getTable(font,Tag.OS_2);
  table.add(Arrays.asList(new String[]{"Units per em",String.format("%d",headTable.unitsPerEm())}));
  table.add(Arrays.asList(new String[]{"[xMin, xMax]",String.format("[%d, %d]",headTable.xMin(),headTable.xMax())}));
  table.add(Arrays.asList(new String[]{"[yMin, yMax]",String.format("[%d, %d]",headTable.yMin(),headTable.yMax())}));
  table.add(Arrays.asList(new String[]{"Smallest readable size (px per em)",String.format("%d",headTable.lowestRecPPEM())}));
  table.add(Arrays.asList(new String[]{"hhea ascender",String.format("%d",hheaTable.ascender())}));
  table.add(Arrays.asList(new String[]{"hhea descender",String.format("%d",hheaTable.descender())}));
  table.add(Arrays.asList(new String[]{"hhea typographic line gap",String.format("%d",hheaTable.lineGap())}));
  table.add(Arrays.asList(new String[]{"OS/2 Windows ascender",String.format("%d",os2Table.usWinAscent())}));
  table.add(Arrays.asList(new String[]{"OS/2 Windows descender",String.format("%d",os2Table.usWinDescent())}));
  table.add(Arrays.asList(new String[]{"OS/2 typographic ascender",String.format("%d",os2Table.sTypoAscender())}));
  table.add(Arrays.asList(new String[]{"OS/2 typographic ascender",String.format("%d",os2Table.sTypoDescender())}));
  table.add(Arrays.asList(new String[]{"OS/2 typographic line gap",String.format("%d",os2Table.sTypoLineGap())}));
  return table;
}

public static DataDisplayTable listFontMetrics ( Font font ) { String [ ] header = { "Name" , "Value" } ; Align [ ] displayAlignment = { Align . Left , Align . Left } ; DataDisplayTable table = new DataDisplayTable ( Arrays . asList ( header ) ) ; table . setAlignment ( Arrays . asList ( displayAlignment ) ) ; FontHeaderTable headTable = ( FontHeaderTable ) FontUtils . getTable ( font , Tag . head ) ; HorizontalHeaderTable hheaTable = ( HorizontalHeaderTable ) FontUtils . getTable ( font , Tag . hhea ) ; OS2Table os2Table = ( OS2Table ) FontUtils . getTable ( font , Tag . OS_2 ) ; table . add ( Arrays . asList ( new String [ ] { "Units per em" , String . format ( "%d" , headTable . unitsPerEm ( ) ) } ) ) ; table . add ( Arrays . asList ( new String [ ] { "[xMin, xMax]" , String . format ( "[%d, %d]" , headTable . xMin ( ) , headTable . xMax ( ) ) } ) ) ; table . add ( Arrays . asList ( new String [ ] { "[yMin, yMax]" , String . format ( "[%d, %d]" , headTable . yMin ( ) , headTable . yMax ( ) ) } ) ) ; table . add ( Arrays . asList ( new String [ ] { "Smallest readable size (px per em)" , String . format ( "%d" , headTable . lowestRecPPEM ( ) ) } ) ) ; table . add ( Arrays . asList ( new String [ ] { "hhea ascender" , String . format ( "%d" , hheaTable . ascender ( ) ) } ) ) ; table . add ( Arrays . asList ( new String [ ] { "hhea descender" , String . format ( "%d" , hheaTable . descender ( ) ) } ) ) ; table . add ( Arrays . asList ( new String [ ] { "hhea typographic line gap" , String . format ( "%d" , hheaTable . lineGap ( ) ) } ) ) ; table . add ( Arrays . asList ( new String [ ] { "OS/2 Windows ascender" , String . format ( "%d" , os2Table . usWinAscent ( ) ) } ) ) ; table . add ( Arrays . asList ( new String [ ] { "OS/2 Windows descender" , String . format ( "%d" , os2Table . usWinDescent ( ) ) } ) ) ; table . add ( Arrays . asList ( new String [ ] { "OS/2 typographic ascender" , String . format ( "%d" , os2Table . sTypoAscender ( ) ) } ) ) ; table . add ( Arrays . asList ( new String [ ] { "OS/2 typographic ascender" , String . format ( "%d" , os2Table . sTypoDescender ( ) ) } ) ) ; table . add ( Arrays . asList ( new String [ ] { "OS/2 typographic line gap" , String . format ( "%d" , os2Table . sTypoLineGap ( ) ) } ) ) ; return table ; }
gets a list of information regarding various dimensions about the given font from the head , hhea , and os / 2 font tables
