2015-02-10 3 views
0

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

Например, когда у меня есть горизонтальный текст, матрица преобразования выглядит следующим образом:
«71.9871 0 0 73,5 178.668 522.2227 ТМ» , что означает, что высота текста является параметром д (73,5), соотношение каждый символ является a/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), но agian, как я могу узнать высоту текста?).

спасибо.

+1

Прежде всего, вы знаете, что (по крайней мере!) Здесь задействованы две матрицы и три скаляра? У вас есть текущая матрица преобразования, текстовая матрица, размер шрифта, горизонтальное масштабирование и настройка пользовательского блока страницы. – mkl

ответ

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²).

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