import com.lowagie.text.pdf.BaseFont;
import org.xhtmlrenderer.pdf.ITextFontResolver;

import java.awt.*;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.*;
import java.util.List;

/**
 */
public class ListFontFamilyNames {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.err.println("Need path to font files (directory or file name)");
            System.exit(1);
        }
        File fod = new File(args[0]);
        List fontFiles = new ArrayList();
        if (fod.isDirectory()) {
            fontFiles.addAll(Arrays.asList(fod.listFiles(new FilenameFilter() {
                public boolean accept(File file, String s) {
                    return s.endsWith(".ttf");
                }
            })));
        } else {
            fontFiles.add(fod);
        }
        //System.out.println("font files " + fontFiles);
        List errors = new ArrayList();
        for (Iterator fit = fontFiles.iterator(); fit.hasNext();) {
            File f = (File) fit.next();
            Font awtf = null;
            try {
                awtf = Font.createFont(Font.TRUETYPE_FONT, f);
            } catch (FontFormatException e) {
                System.err.println("Trying to load font via AWT: " + e.getMessage());
                System.exit(1);
            } catch (IOException e) {
                System.err.println("Trying to load font via AWT: " + e.getMessage());
                System.exit(1);
            }
            Set set;
            try {
                set = ITextFontResolver.getDistinctFontFamilyNames(f.getAbsolutePath(), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                System.out.println(
                        "Font located at " + f.getPath() + "\n" +
                                "  family name (reported by AWT): " + awtf.getFamily() + "\n" +
                                "  family name (reported by iText): " + set.iterator().next() + "\n"
                );
            } catch (RuntimeException e) {
                if (e.getMessage().contains("not a valid TTF or OTF file.")) {
                    errors.add(e.getMessage());
                } else if (e.getMessage().contains("Table 'OS/2' does not exist")) {
                    errors.add(e.getMessage());
                } else if (e.getMessage().contains("licensing restrictions.")) {
                    errors.add(e.getMessage());
                } else {
                    throw e;
                }
            }
        }
        if (errors.size() > 0) {
            if (args.length == 2 && args[1].equals("-e")) {
                System.err.println("Errors were reported on reading some font files.");
                for (Iterator eit = errors.iterator(); eit.hasNext();) {
                    System.err.println((String) eit.next());
                }
            } else {
                System.err.println("Errors were reported on reading some font files. Pass -e as argument to show them, and re-run.");
            }
        }
    }
}