Интервал между символами PDF и оператор TJ - PullRequest
0 голосов
/ 29 августа 2018

Я новичок в PDF, и я хочу манипулировать пространством между символами в файле. Я прочитал PDFReference и понял некоторые из них. Теперь у меня проблема в том, как рассчитать пробелы для рендеринга текста.

у меня например:

1 0 0 1 0 188.28799438 cm
BT 
/F2 11.04 Tf
1 0 0 -1 0 9.38000011 Tm 
(Some)Tj ( )Tj 
21.24200058 0 Td 
(text)Tj ( )Tj 

Который я хочу превратить в это:

1 0 0 1 0 188.28799438 cm
BT 
/F2 11.04 Tf
1 0 0 -1 0 9.38000011 Tm 
[(S)10(o)10(m)10(e)( )]TJ 
21.24200058 0 Td 
[(t)10(e)10(x)10(t)( )]TJ 

Чтобы добавить пробелы, а затем иметь возможность манипулировать ими. Однако мне было интересно, как рассчитать ctm и линейную матрицу с этими добавленными значениями.

Я знаю, что мы соединяем cm с предыдущим.

см2 х см1

Tms не сцеплены, Tm2 заменяет Tm1.

Я застрял с оператором td и новыми пробелами, которые я добавил. Любая подсказка?

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Как поясняется в комментариях, OP не запрашивает влияние чисел TJ на текущую матрицу преобразования или матрицу текстовых строк , а вместо этого на текстовая матрица T m .

Это объясняется в спецификации ISO 32000-1 (и, что то же самое, в ISO 32000-2) в разделе 9.4.4 Сведения о текстовом пространстве : после рисования глифа (вероятно, за которым следует число в TJ аргумент массива инструкций), текстовая матрица должна быть обновлена ​​следующим образом:

assignment new Tm

В горизонтальном режиме t x - смещение, а t y - ноль, в вертикальном режиме t x - ноль, а t y - смещение. Применимое значение рассчитывается как

determination tx and ty

т.е. если вы выполняете это вычисление во время обработки инструкции TJ и после кода символа для текущего нарисованного глифа есть число, то это число рассматривается здесь как параметр T j .

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

t x = (-T j / 1000) × T fs × T h

t y = (-T j / 1000) × T fs

0 голосов
/ 29 августа 2018

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

  • CTM - это основная матрица, которая отображает координаты пространства пользователя в координаты устройства вывода; для каждого глифа он объединяется с другими параметрами, чтобы создать временную матрицу рендеринга текста для позиционирования глифа, но CTM не накапливает изменения при позиционировании глифов (см. 9.4.4 «Сведения о текстовом пространстве» в справочном документе PDF 32000)
  • Матрица строк фиксирует значение исходной текстовой матрицы в начале строки текста; он действительно используется только для сопоставления вертикального положения строк текста и не зависит от расстояния между глифами (см. 9.4.2 «Операторы позиционирования текста»)
...