【问题标题】:Extendsript - Adobe Illustrator - Change Character Font Family/Style for each word inside TextFrameExtendsript - Adob​​e Illustrator - 更改 TextFrame 中每个单词的字符字体系列/样式
【发布时间】:2022-01-05 15:46:33
【问题描述】:

我是 AI 和脚本的新手。我有一个我开始的模板。在此模板中,有一个 TextFrame(称为 CITIES_1)。里面是模板文本,如:

城市 1 地址路 123 号。 我的城市,我的州,我的邮编

城市 2 地址路 567 号。 MyCity2, MyState2 MyZip2

CITY 1 标头为 Helvetica Neue LT Std / 75 Bold 其余信息为 Helvetica Neue LT Std / 55 Roman

我正在尝试将此内容动态更改为我在文件中拥有的城市信息。

我已尝试更改 TextFrame.contents,但它使用第一个字体系列/样式来处理整个内容。关于如何在保持相同“格式”的同时更改数据的任何想法?

TIA!

var helBold = app.textFonts.getByName("HelveticaNeueLTStd-Bd");
var helRoman = app.textFonts.getByName("HelveticaNeueLTStd-Roman");
var bold = myDoc.characterStyles.add({ name: "HelveticaNeueLTStd-Roman" });
var roman = myDoc.characterStyles.add({ name: "HelveticaNeueLTStd-Roman" });
var currTF = templateLayer.textFrames.getByName("CITIES_1");
currTF.contents = "MYCITY\r123 MyAddress Dr.\rMyCity, ST 12345\r555.555.5555\r";
bold.applyTo(currTF.words[1]);

【问题讨论】:

  • 如果您已经尝试过,最好显示该代码。
  • 您可以从这里使用一些示例(如何处理文本样式):stackoverflow.com/questions/67251603/…
  • 我会看看你的例子 Yuri,看看我能做什么。我将在单独的评论中发布代码。该代码将注释以前的​​尝试
  • var helBold = app.textFonts.getByName("HelveticaNeueLTStd-Bd"); var helRoman = app.textFonts.getByName("HelveticaNeueLTStd-Roman"); var bold = myDoc.characterStyles.add({ name: "HelveticaNeueLTStd-Roman" }); //var roman = myDoc.characterStyles.add({ name: "HelveticaNeueLTStd-Roman" }); var currTF = templateLayer.textFrames.getByName("CITIES_1"); currTF.contents = "MYCITY\r123 MyAddress Dr.\rMyCity, ST 12345\r555.555.5555\r"; bold.applyTo(currTF.words[1]);
  • 我已将代码添加到您的问题中(您可以自己完成)。所以你只需要对文本框架中的段落的每个第一个单词应用一些样式?

标签: javascript styles adobe-illustrator extendscript


【解决方案1】:

根据您的代码,我想您每隔​​一行(从第一行开始)都有一个城市名称:

我的城市

123 MyAddress 博士

我的城市,ST 12345

555.555.5555

并且您想在第二行的每个第一个单词上应用一些样式。像这样的:

MYCITY

123 MyAddress 博士

我的城市,ST 12345

555.555.5555

可以用这段代码完成:

var doc = app.activeDocument;

// pick the text frame and fill it with the text
var curTF = doc.pageItems.getByName('CITIES_1');
curTF.contents = 'MYCITY\r123 MyAddress Dr.\rMyCity, ST 12345\r555.555.5555';

// make two styles
var roman = make_style('roman', 'ArialMT', 10);
var bold = make_style('bold', 'Arial-BoldMT', 14);

// apply style 'roman' on the text
roman.applyTo(curTF.textRange, true);

// loop through the text and apply the style 'bold'
// on the first word of every second paragraph
var paragraphs = curTF.textRange.paragraphs;
for (var i = 0; i < paragraphs.length; i += 2) {
    bold.applyTo(paragraphs[i].words[0], true);
}

function make_style(style_name, font_name, size) {
    var doc = app.activeDocument;
    try { var style = doc.characterStyles.add(style_name) }
    catch(e) { var style = doc.characterStyles.getByName(style_name) }
    style.characterAttributes.size = size;
    style.characterAttributes.textFont = textFonts.getByName(font_name);
    return style;
}

输出:

【讨论】:

  • 我让它工作了!感谢您的代码(我对其进行了一些调整以满足我的需要......添加了颜色、位置等)我让它工作了。您的代码帮助我理解字符样式。我添加了一个数组,上面写着“--NEXT--”来表示标题...这是我的代码: function applyStyles(text) { text.textRange.paragraphAttributes.justification = Justification.LEFT; helRoman.applyTo(text.textRange); helBold.applyTo(text.words[0]); var words = text.words; for(var i = 0; i
  • 再次感谢...现在我必须弄清楚如何创建一个 nextPage 以链接到另一个 TextFrame,因为城市列表太长了它会超出页面。
  • 链接到结果图片:link
  • 也许在您的情况下(城市 = 段落),使用带有或代替字符样式的段落样式是有意义的。至于几个链接的文本框架——我没有现成的解决方案(我会使用 InDesign 来完成这样的任务)。但我也可以尝试弄清楚。如果您需要帮助,请告诉我。
  • 我从未使用过 InDesign,但我今天会看看它。我会告诉你进展如何。
猜你喜欢
  • 1970-01-01
  • 2013-01-01
  • 2011-03-03
  • 2019-10-21
  • 2023-03-06
  • 2015-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多