Как я могу получить высоту текста из матрицы преобразования PDF?

Я делаю синтаксический анализатор pdf, и у меня проблема, когда я пытаюсь прочитать матрицу преобразования (Tm) текста.

Например, если у меня горизонтальный текст, матрица преобразования выглядит так:
«71.9871 0 0 73,5 178,668 522,2227 Tm», что означает, что высота текста - это параметр d (73,5), соотношение каждого символа - это / d (71.9871 / 73.5), и его нужно перевести в точку (178.668 522.2227).

Если я поверну этот текст, то матрица преобразования будет выглядеть так:
«63.1614 -34.5367 35.2625 64.4888 181.8616 575.8494 Tm»

Как я могу получить высоту текста 73,5?

Если я экспортирую тот же файл как файл svg, я получаю эту матрицу: «0,8593 0,4699 -0,4798 0,8774 181,8616 266,0405» и что высота текста составляет 73,5. (Я заметил, что если я разделю параметр d моего повернутого текста на высоту текста (73,5), я получу параметр d матрицы svg (0,8774), но как я могу узнать высоту текста?).

Спасибо.


person michalis    schedule 10.02.2015    source источник
comment
Во-первых, вы знаете, что здесь задействованы (как минимум!) Две матрицы и три скаляра? У вас есть текущая матрица преобразования, текстовая матрица, размер шрифта, горизонтальное масштабирование и настройка единиц пользователя страницы.   -  person mkl    schedule 10.02.2015


Ответы (1)


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

Итак, предположим, что у вас есть комбинированная матрица.

Чтобы определить факторы, на которые шрифт растягивается из своего состояния по умолчанию размером 1, вы можете просто применить эту матрицу к вертикальному и горизонтальному сегменту линии длиной 1, например От [0, 0, 1] до [1, 0, 1] и от [0, 0, 1] до [0,!, 1], а затем вычислите длину результирующих отрезков линии.

PS Изучив второстепенную линейную алгебру, вы увидите, что для матрицы

a b 0
c d 0
e f 1

это составляет размер шрифта по горизонтали sqrt(a² + b²) и размер шрифта по вертикали (высота) sqrt(c² + d²).

person mkl    schedule 10.02.2015