PDFBox - Как конвертировать Xheight в баллы - PullRequest
1 голос
/ 20 мая 2019

Я пытаюсь найти Xheight шрифта, используя Pdfbox .

font это тип PDFont

println(font.name + ": " + font.fontDescriptor.xHeight)

Вывод для шрифта размером 16 пт:

TimesNewRomanPS-BoldMT: 546.0

Но я не могу определить, как преобразовать эти 546,0 в точки, пиксели или мм.

1 Ответ

1 голос
/ 20 мая 2019

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

Подробнее

В качестве примера вы ссылаетесь на CourierNew в вашем файле примера font-list-1.pdf .

Этот шрифт используется на странице 2, связанный FontDescriptor является этим объектом:

44 0 obj
<<
  /StemV 42
  /FontName/CourierNewPSMT
  /FontStretch/Normal
  /FontWeight 400
  /Flags 34
  /Descent -300
  /FontBBox[-21 -680 638 1021]
  /Ascent 832
  /FontFamily(Courier New)
  /CapHeight 578
  /XHeight -578
  /Type/FontDescriptor
  /ItalicAngle 0
>>
endobj

Таким образом, значение XHeight шрифта равно -578. Это означает, что это мусор несколькими способами:

  • Это отрицательно. Согласно спецификации значение XHeight равно вертикальной координате вершины плоских не восходящих строчных букв (например, буквы x), измеренной от базовой линии (ISO 32000-1, таблица 122). - Записи, общие для всех дескрипторов шрифтов). Следовательно, наличие отрицательного значения означает, что все эти плоские нерастущие строчные буквы полностью прорисованы под базовой линией.

    Это, очевидно, глупость для довольно нормального шрифта, такого как CourierNew.

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

  • Абсолютное значение XHeight равно значению CapHeight , которое указано как вертикальная координата вершины плоских заглавных букв, измеренная от базовой линии (там же).

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

    Это явно ерунда для CourierNew.

(Значения XHeight для многих других шрифтов в вашем файле сэмплов также нарушаются.)

Как еще получить разумное значение высоты х

Если вам действительно нужно значение высоты х ваших шрифтов, вы должны проверить инструкции по рисованию для плоских нерастущих строчных букв в них и вывести значение высоты х из их соответствующих высот.

(Это не всегда успешно, потому что эти шрифты могут быть доступны только как встроенные подмножества, и такие подмножества могут быть лишены плоских не восходящих строчных букв.)

...