Определить перевод / положение из PDF операторов Tm - PullRequest
2 голосов
/ 15 сентября 2011

Я пытаюсь извлечь некоторые текстовые данные из файла PDF.Для этого мне нужно знать, где какой-то текст печатается на странице, чтобы я мог сопоставлять местоположения различных фрагментов данных.Однако я застреваю, потому что не до конца понимаю поведение текстовой матрицы, установленной оператором Tm.

Tm (0.0, -5.28, 5.28, 0.0, 429.7006, 803.9603)
rg (0.617, 0.098, 0.043)
Tj '\x01'
Tm (0.0, -9.0, 9.0, 0.0, 428.1406, 784.8203)
rg (0.0, 0.219, 0.512)
Tc (2.4756,)
Tj '4567'

Это часть содержимого потока.Как видите, он имеет два вызова Tm, тесно связанных друг с другом.Весь обычный текст печатается в пространстве Tm (0.0, -9.0, 9.0, 0.0) - похоже, что пространство -5.28 / 5.28 используется только для печати некоторых специальных символов.Теперь я знаю, что последние два параметра Tm используются для установки текущего местоположения на новое, но кажется, что эти числа зависят от большего контекста (вероятно, шкалы 5.28 и 9.0, так или иначе).Однако я не могу понять, как все это сочетается, и спецификация (на странице 250 есть «объяснение») кажется мне совершенно бесполезной.

РЕДАКТИРОВАТЬ: расширенный пример, почему это меняflummoxed:

Tm 0 -27 27 0 545.5606 817.2203
(rg, Tc, Tw, Tj, Tf omitted)
TD 0.0156 -1.2556
Tm 0 -9 9 0 441.9406 677.4803
TD 10.6733 0 # more omitted, including other TD ops with second param 0
TD -82.7267 -1.5333 # start of a new line
Tc 0
Tj (3)
Tf /F2 1
Tm 0 -5.28 5.28 0 429.7006 803.9603
Tj ()
Tf /TT2 1
Tm 0 -9 9 0 428.1406 784.8203
Tc 2.4756
Tj (4567) # these appear on the same line as before the double Tm

В моем исходном коде я предполагал, что параметры e и f для Tm и параметры для TD находятся в одном пространстве, что приводит к организованным координатам.Однако здесь это не получается: 4567 в последнем Tj отображается в той же строке, что и предыдущие 3, тогда как координата y перешла из 677.4803 + -1.5333 = 675.947, но после последнего Tm координата оси y выглядит какустановить на 784,8203;предполагая, что "4567" должно быть нарисовано выше 3.

Ответы [ 2 ]

6 голосов
/ 15 сентября 2011

Текстовая матрица объединяется с текущей матрицей преобразования для установки позиции текста.Ваш текст размещен в (429.7006, 803.9603) и в (428.1406, 784.8203).Размер текста составляет 5,28 и 9 баллов.Обычный метод - установить размер шрифта на 1 с помощью оператора Tf и установить фактический размер шрифта путем масштабирования текстовой матрицы.Ваш текст также вращается.Для правильного расчета позиции текста необходимо проанализировать весь поток содержимого и выполнить все q, Q, cm, Tf, Tm и все другие связанные с текстом операторы.

1 голос
/ 15 сентября 2011

Обычно это w, 0, o, h, x, y, где x, y - начальная координата в PDF-кординатах, w, h - размер шрифта (технически можно иметь другое значение для эффектов масштабирования.

Вы также можете иметь 0, w, h, 0, x, y - минус значения и различное положение w, h показывают, что в тексте есть сдвиг / поворот. Все математические математики.

Вам также может понадобиться ввести CTM, чтобы получить окончательное начальное местоположение текста (текст можно масштабировать в элементе Form).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...