[ID CC-CC2022] Замена "битых" шрифтов с помощью скрипта

  • Автор темы Автор темы veretragna
  • Дата начала Дата начала

veretragna

γνώσις
Топикстартер
Сообщения
578
Реакции
200
Здравствуйте.
Я решил написать небольшой скрипт, который бы менял "битые" шрифты в документе на нормальные.

Есть документ, в котором были подключены шрифты Roboto, в папке Document Fonts их нет и все они отображаются как [Roboto (TT)].
2020-05-29_161842.png

В моей системе доступны шрифты этого семейства по подписке CC. Можно достаточно легко починить шрифты вручную через Type - Find Font, с таким результатом:
2020-05-29_162006.png

Хочется это дело автоматизировать, чтобы по щелчку заменялось все семейство, и желательно по всем открытым документам.
Драфт скрипта уже готов и работает, но только если менять семейство на любое другое, типа Noto Sans или Myriad Pro.

Если менять на "нормальное" семейство с тем же названием без (TT), не работает. В свойствах полученного targetFont свойство isValid всегда true - то есть, скрипт получает нормальный валидный шрифт, но если его применить к стилю абзаца, ничего не меняется и семейство шрифта по-прежнему выглядит как [Roboto (TT)].
JavaScript:
var source = "Roboto (TT)"; // семейство имеет именно это имя в data browser
var target = "Roboto";

var myPgfStyles = app.activeDocument.allParagraphStyles;
for (var i = 1; i < myPgfStyles.length; i++) {
    var paraStyle = myPgfStyles[i];
    var paraFontFamily = paraStyle.appliedFont.fontFamily;
    if (paraFontFamily == source) {
        //var paraFontStyle = paraStyle.appliedFont.fontStyleName;
        var targetFont = app.fonts.itemByName(target);
        paraStyle.appliedFont = targetFont;
        //paraStyle.fontStyle = paraFontStyle;
    }
}
Где здесь загвоздка и почему валидный шрифт не подхватывается?
 
Пересоздать параграфстиль с нужным шрифтом
 
Без вариантов?
Вот бы заглянуть в потроха индизайна и посмотреть, как он это делает
 
Это мысли вслух. Хотелось бы посмотреть, как сам индизайн работает со шрифтом в рамках Type - Find font. Он не пересоздает стиль, а меняет шрифт в стиле, если выделить галочку Redefine style. К сожалению, это невозможно, но ведь хочется
 
Индизайн много чего делает, не вынося уши от действия в объектную модель
Я бы сказал - выносит крохотную часть и в основном криво
Так не переписывать же его изза этого целиком?
 
Хорошо, можно попробовать по-другому.
Присвоить сначала условный ариал, а потом попробовать валидный шрифт. Грязный трюк, но может получиться
 
Хм. Похоже, не настолько этот шрифт и валидный. Если сначала заменить все на Arial, в документе не остается следов Roboto.
Если потом этот Arial заменить на Roboto, он внезапно опять становится TT.
Где-то в другом месте нужно копать
 
Заменил шрифты вручную на правильный Roboto, сделал Save as.
Открыл документ заново и попытался заменить Roboto на Roboto скриптом.
Опять откуда-то вылез [Roboto (TT)].
'rake'
 

Не по теме:
Вот как вижу в пришедшем документе этот шрифт -- сразу (более ничего не проверяя и не раскладывая) отправляю на РИП чтобы проверить рипуется ли. >50%, что риповаться не будет с руганью на шрифт.


Что делать?
Для начала попробовать загрузить шрифт отсюда: Google Fonts + Google Fonts (по идее, там должна быть самая свежая версия 896 символов в шрифте)
Также, шрифт можно загрузить отсюда: roboto - Search - dafont.com (здесь версия постарше 878 символов, возможно, глюки именно с этой версией)
 
Последнее редактирование:
кто-нибудь вообще понимает, откуда все это "(OTF)" и "(TT)" берется? несколько копий шрифтов на машине?

вот сейчас случай на машине у клиента - шаблон .indt, в document fonts лежат два файла Work Sans Pro - Regular и Bold. Шаблон открывается без предупреждений. Оба шрифта установил в систему. При открытии .indd, сделанного на базе шаблона и сохраненного в другую папку вылезает предупреждение - отсутствует Work Sans Pro (OTF)

на скорую руку пока не понял, что с этим делать. там правда начертаний в bold и regular похоже вагон в каждом, может они друг друга дублируют, и ставить надо только один...
 
А можно получить такой файл для опытов?
Клиентские не дам!

Будет не лень -- попытаюсь сымитировать. Благо вариантов этого Roboto накопилось от 314 до 1380 символов в шрифте.
 

Не по теме:

Вот как вижу в пришедшем документе этот шрифт -- сразу (более ничего не проверяя и не раскладывая) отправляю на РИП чтобы проверить рипуется ли. >50%, что риповаться не будет с руганью на шрифт.


Что делать?

Для начала попробовать загрузить шрифт отсюда: Google Fonts + Google Fonts (по идее, там должна быть самая свежая версия 896 символов в шрифте)
Также, шрифт можно загрузить отсюда: roboto - Search - dafont.com (здесь версия постарше 878 символов, возможно, глюки именно с этой версией)
Видимо, неудачный пример я выбрал для обкатки скрипта. Раньше тоже были примерно такие же проблемы с Roboto, но списывал это на кривой макет и чинил руками.
В целом проблема ведь не в конкретном семействе Roboto, а в том, что скрипт при всех правильных исходных данных не работает, как надо. Проверю по мере разработки еще на других семействах шрифтов, возможно, там такой проблемы не будет вовсе.
 
откуда все это "(OTF)" и "(TT)" берется? несколько копий шрифтов на машине?
Моя гипотеза — у шрифта есть такое свойство — "Имя PostScript". Если в системе установлены одновременно варианты шрифта OTF, TT, T1..., то значение этого свойства может у них совпадать и создавать конфликт с такими вот странными последствиями.
Screenshot_8.jpg
может они друг друга дублируют,
В таком смысле можно сказать, что да.
и ставить надо только один...
Тогда конфликтов точно не будет.
 
Моя гипотеза — у шрифта есть такое свойство — "Имя PostScript". Если в системе установлены одновременно варианты шрифта OTF, TT, T1..., то значение этого свойства может у них совпадать и создавать конфликт с такими вот странными последствиями.
Посмотреть вложение 132154
В случае с Roboto, похоже, дело в чем-то другом. Я перед тестированием убедился, что в системе и Common files нет никаких копий Roboto, кроме подписочных, а (TT) все равно регулярно вылезает.
 
  • Спасибо
Реакции: Eugenyus