Extendsript - Adobe Illustrator - 为 TextFrame 中的每个单词更改字符字体 Family/Style
Extendsript - Adobe Illustrator - Change Character Font Family/Style for each word inside TextFrame
我是 AI 和脚本的新手。我有一个模板。在这个模板中,有一个 TextFrame(称为 CITIES_1)。这里的模板文本如下:
城市 1
地址路 123 号
我的城市,我的州我的邮编
城市 2
567地址路。
MyCity2、MyState2 MyZip2
CITY 1 header 是 Helvetica Neue LT Std / 75 粗体
其余信息是 Helvetica Neue LT Std / 55 Roman
我正在尝试将此内容动态更改为我在文件中的城市信息。
我试过更改 TextFrame.contents 但它使用第一个字体 family/style 来完成整个事情。知道如何在保持相同“格式”的同时更改数据吗?
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]);
根据你的代码,我想你每隔一行就有一个城市名称(从第一行开始):
MYCITY
123 MyAddress Dr.
MyCity, ST 12345
555.555.5555
并且您想对每一第二行的每个第一个单词应用一些样式。像这样:
MYCITY
123 MyAddress Dr.
MyCity, 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;
}
输出:
我是 AI 和脚本的新手。我有一个模板。在这个模板中,有一个 TextFrame(称为 CITIES_1)。这里的模板文本如下:
城市 1 地址路 123 号 我的城市,我的州我的邮编
城市 2 567地址路。 MyCity2、MyState2 MyZip2
CITY 1 header 是 Helvetica Neue LT Std / 75 粗体 其余信息是 Helvetica Neue LT Std / 55 Roman
我正在尝试将此内容动态更改为我在文件中的城市信息。
我试过更改 TextFrame.contents 但它使用第一个字体 family/style 来完成整个事情。知道如何在保持相同“格式”的同时更改数据吗?
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]);
根据你的代码,我想你每隔一行就有一个城市名称(从第一行开始):
MYCITY
123 MyAddress Dr.
MyCity, ST 12345
555.555.5555
并且您想对每一第二行的每个第一个单词应用一些样式。像这样:
MYCITY
123 MyAddress Dr.
MyCity, 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;
}
输出: