Интервал между символами 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 "Операторы позиционирования текста")