Интервал между символами PDF и оператор TJ

Я новичок в 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 и линейную матрицу с этими добавленными значениями.

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

см2 х см1

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

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

2 ответа

Решение

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

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

назначение нового Тм

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

определение тх и ты

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

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

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

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

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

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