Насколько я могу судить, прямого способа определить, можно ли внедрить шрифт, нет.
Я сделал быстрый поиск, и я не думаю, что это возможно, кроме как с помощью метода перехвата исключений, упомянутого Эриком в комментариях.
// 1) have a list of all fonts ArrayList allAvailableFonts;
// 2) second list of fonts that that can be embedded ArrayList embedableFonts;
//Iterate through every available font in allAvailableFonts
for( .... allAvailableFonts ..... )
{
boolean isFontEmbeddable = true;
try
{
// try to embed the font
}
catch( DocumentException de)
{
//this font cannot be embedded
isEmbeddable = false;
}
if( isEmbeddable )
{
// add to list of embeddable fonts
embedableFonts.add ( font );
}
}
Вероятно, вы можете пойти на хардкор и выполнить собственные вызовы Windows Apis, чтобы получить тот же результат, но я думаю, что для такой простой задачи это слишком много.
Провел некоторое исследование и выяснил, как Java генерирует это исключение
Код, который генерирует указанное выше исключение, можно найти здесь.
http://kickjava.com/src/com/lowagie/text/pdf/TrueTypeFont.java.htm
Номер строки 367 368
if (!justNames && embedded && os_2.fsType == 2)
throw new DocumentException(fileName + style + " cannot be embedded due to licensing restrictions.");
Интересно отметить условие os_2.fsType == 2
os_2 является экземпляром WindowsMetrics
см. Строку 174 здесь
http://kickjava.com/src/com/lowagie/text/pdf/TrueTypeFont.java.htm
Поиск WindowsMetrics в Google, и это было то, что я получил.
Это объясняет, что параметр fsType содержит информацию о том, можно ли внедрить шрифт.
http://www.microsoft.com/typography/otspec/os2ver3.htm#fst
Java-эквивалент WindowsMetrics, используемый в itext
http://www.docjar.org/docs/api/com/lowagie/text/pdf/TrueTypeFont.WindowsMetrics.html