Нет простого способа сделать это, насколько мне известно.Прежде всего, это невозможно с DOM, поэтому забудьте об использовании textItem.contents
.С AM сложнее то, что код AM для текстовых слоев действительно точен.Каждый раз, когда вы что-то меняете, он определяет все возможные параметры для всех «блоков» текста, например, в этом случае у меня был текстовый слой высотой 35px, написанный шрифтом Gudea, и я изменил одну букву на 70px: https://pastebin.com/XLP64azz Youможет видеть, что там много мусора, и текстовый слой теперь рассматривается как 3 отдельных блока: буквы от 0 до 5 (строки 64-65: stack
), от 5 до 6 (строки 217-218: O
) и с 6 до 14 (строки 281-282: verflow
).Чуть ниже каждого блока есть строки, которые устанавливают размер, например
desc62.putUnitDouble( cTID('Sz '), cTID('#Pxl'), 35.000000 );
desc62.putUnitDouble( sTID('impliedFontSize'), cTID('#Pxl'), 35.000000 );
Я знаю, что можно удалить большинство лишних дескрипторов (например, если вы удалите дескрипторы, которые определяют имя шрифта, слойбудет иметь имя шрифта, которое у него было изначально), так что я думаю, что можно уменьшить эту огромную функцию до нескольких строк, которые изменяют только размер конкретной буквы, но я этого не пробовал.Я думаю, алгоритм будет выглядеть следующим образом:
- получить размер шрифта и текст с помощью DOM;
- разделить текст на блоки (например,
from 0 to 1 + from 1 to last character
, чтобы изменить размер шрифта для первой буквы)); - используйте эту функцию для установки параметров для определенных блоков;
И будут проблемы, если в текстовом слое уже существует несколько стилей: у вас будетчтобы проанализировать содержимое слоя с помощью AM, получите все стили всех блоков, чтобы найти тот, на который вы ссылаетесь ...