String font=text.getFont().getBaseFont(); // equal null
PDFont.getBaseFont
реализуется просто возвращает значение BASEFONT ввода соответствующего словаря шрифта.
Не все шрифты предоставляют BaseFont запись в их словаре шрифтов. В таком случае сообщение вернет null
.
Согласно спецификации PDF вы можете ожидать только шрифты, чтобы иметь эту запись, если они Type0 (композитный), Type1 или TrueType шрифты. Если они Type3, у них нет этой записи.
Это на самом деле имеет смысл: Type3 шрифты являются чистыми материалами в формате PDF вплоть до их определений глифов; таким образом, нет базового шрифта для рассмотрения.
В случае Type0 (составных) шрифтов, которые вы могли бы на самом деле считаете, глядя на нисходящем шрифта (с помощью PDType0Font.getDescendantFont()
) и проверки его BASEFONT записи, поскольку запись составного шрифта определяются как состав базы потомка в имя шрифта и имя CMap.
И хотя все вышеизложенное верно для PDF, следуя спецификации, вы должны привыкнуть видеть PDF-файлы в дикой природе, которые не соответствуют спецификации 100%. Поскольку базовая запись шрифта не всегда строго необходима для обработки PDF в целом, то в PDF-файлах, конечно же, нет файлов PDF, которые не предоставляют базовую запись шрифта в таких случаях.
Таким образом, всегда считайте значения null
(или значения, не соответствующие спецификации) здесь.
Спасибо за ваш хороший ответ, если это получилось null из-за причин, о которых вы упомянули, есть ли какие-либо другие методы, позволяющие мне узнать шрифт? –
Для шрифтов * Type3 * нет; с другой стороны, там, скорее всего, просто нет имени, чтобы пойти с шрифтом * Type3 *. В случае шрифтов, которые должны иметь запись ** BaseFont **, но не ... ну, посмотрите на записи ** FontName ** и ** FontFamily ** в ** FontDescriptor **, и, возможно, в самой программе шрифтов. – mkl
Так что я буду делать? помогите мне, теперь я прочитал текст из pdf и отобразил его на html-страницах, какой шрифт я применяю для текста, чтобы его шрифт имел тип 3 (равный null)? –