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.");
}
}
}
}