Как проверить Полностью встроенный и встроенный шрифт с помощью PDFBOX

Привет, я хочу проверить полностью встраивание и вложение подмножеств шрифтов в PDF с использованием PDFBOX. Я попытался использовать следующую логику для проверки:


private boolean IsEmbedded(Map<String, PDFont> fontsMap, Set<String> keys) {
    for(String key:keys) {
        PDFont font = fontsMap.get(key);
        PDFontDescriptor  fontDescriptor = font.getFontDescriptor();
        if(null != fontDescriptor && fontDescriptor instanceof PDFontDescriptorDictionary){
            PDFontDescriptorDictionary fontDescriptorDictionary = (PDFontDescriptorDictionary)fontDescriptor;
            if(null == fontDescriptorDictionary.getFontFile() && null == fontDescriptorDictionary.getFontFile2() && null == fontDescriptorDictionary.getFontFile3())
                return false;
        }
    }
    return true;
}

Но, похоже, я не смог выяснить, как провести различие между "Полностью встраиванием" и "вложением подмножества". Может кто-нибудь, пожалуйста, дайте мне ответ?

1 ответ

Чтобы процитировать спецификацию PDF ISO 32000-1 для подмножеств шрифтов (раздел 9.6.4):

Документы PDF могут содержать подмножества шрифтов Type 1 и TrueType. Шрифт и дескриптор шрифта, описывающие подмножество шрифтов, немного отличаются от обычных шрифтов. Эти различия позволяют соответствующему читателю распознавать подмножества шрифтов и объединять документы, содержащие разные подмножества одного и того же шрифта. (Для получения дополнительной информации о дескрипторах шрифта см. 9.8, "Дескрипторы шрифта".)

Для подмножества шрифтов имя шрифта PostScript - значение записи шрифта BaseFont и записи дескриптора шрифта FontName - должно начинаться с тега, за которым следует знак плюс (+). Метка должна состоять ровно из шести заглавных букв; выбор букв произвольный, но разные подмножества в одном и том же файле PDF должны иметь разные теги.

ПРИМЕР EOODIA+Poetica - это название подмножества Poetica®, шрифта типа 1.

В PDF, соответствующем этому требованию ("должен", так что это действительно требование), вы, следовательно, можете распознать поднабор шрифтов по их названию.

Имейте в виду, однако, что за пределами PDF вы можете извлечь шрифт из другого, включив только выбранные глифы. По сути, это создает поднабор шрифта, но программное обеспечение для создания PDF, использующее его, может не заметить этого факта и назвать его полностью встроенным шрифтом. По сути, вы никогда не можете знать наверняка.

Другие вопросы по тегам