2014-02-05 3 views
-1

Я извлекаю текст из pdf-файла, используя pdfbox, когда я получаю шрифт для некоторого текста в pdf, он получает нуль, я не понимаю почему! хотя какой-то другой текст в том же файле я получаю его шрифт.GetBaseFont() равно null в pdfbox

, используя этот код:

protected void processTextPosition(TextPosition text) { 
    String font=text.getFont().getBaseFont(); // equal null 

} 

ответ

0
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 (или значения, не соответствующие спецификации) здесь.

+0

Спасибо за ваш хороший ответ, если это получилось null из-за причин, о которых вы упомянули, есть ли какие-либо другие методы, позволяющие мне узнать шрифт? –

+0

Для шрифтов * Type3 * нет; с другой стороны, там, скорее всего, просто нет имени, чтобы пойти с шрифтом * Type3 *. В случае шрифтов, которые должны иметь запись ** BaseFont **, но не ... ну, посмотрите на записи ** FontName ** и ** FontFamily ** в ** FontDescriptor **, и, возможно, в самой программе шрифтов. – mkl

+0

Так что я буду делать? помогите мне, теперь я прочитал текст из pdf и отобразил его на html-страницах, какой шрифт я применяю для текста, чтобы его шрифт имел тип 3 (равный null)? –

Смежные вопросы