如果我设置文档的段落/字符样式,如何将它们导出到 JavaScript,以便可以通过 JavaScript 脚本重新创建它们?
最佳答案
字符和段落样式中的独特属性数量非常多;在CS4中,段落大约170个,字符大约80个。这既包括熟悉的(name
、tracking
),也包括奇怪的(otfTidling
、underlineGapOverprint
、gradientStrokeLength
)。幸运的是,人们很少需要样式的精确克隆(包括其所有属性)。此外,通常字符样式仅定义几个属性。
从无到有创建样式的最简单方法是为所有值假设合理的默认值,并且仅设置偏离的属性。
不过,有一些注意事项。某些属性需要在其他位置创建新项目 - 例如样式的 fillColor
。脚本是否也应该重新创建这种颜色?如果它已经存在,但具有不同的值或颜色模型怎么办? (应该使用现有颜色、覆盖它还是创建一种新颜色?)如果颜色值存在,但使用另一个名称怎么办? (它应该扫描现有列表以查找匹配项吗?)“父”样式也是如此;如果需要创建整个样式树怎么办? dropCapStyle
、nestedStyles
、nestedGrepStyles
和 nestedLineStyles
怎么样?这些是否需要重新创建其字符样式?
另一个潜在的陷阱是使用的测量单位。有些属性是“绝对”的,例如pointSize;其他取决于水平(leftIndent
)或垂直(spaceBefore
)规则设置。 (下面的脚本在运行脚本时保存正在使用的单位,并在完成后恢复它们。)
以下脚本编写了一个新脚本,该脚本定义了您可以轻松编辑和附加的属性列表(请记住上述注意事项)。所有段落/字符样式属性的完整列表可以在 ESTK 帮助菜单中找到,或者在线访问 ParagraphStyle和 CharacterStyle *.
这只是一个基本框架,它可以很容易地适应其他目的。请注意,使用特定的样式名称是硬编码的; 正文
- 这可以替换为
var parstyle = app.selection[0].appliedParagraphStyle;
如果您想在样式段落内单击以保存其样式。还可以调整它来创建字符样式,在这种情况下,您需要测试属性是否未定义,即它是否不是覆盖。
//DESCRIPTION: Create a script to create a par-style
// A Jongware Script 28-Sep-2014
var parstyle = app.activeDocument.paragraphStyles.item("Body Text");
var reference = app.activeDocument.paragraphStyles.item(0);
var properties = [
"name",
"appliedFont",
"fontStyle",
"pointSize",
"leading",
"hyphenation",
"justification",
"firstLineIndent",
"leftIndent",
"rightIndent",
"spaceBefore",
"spaceAfter"
];
r = [];
for (i=0; i<properties.length; i++)
{
if (parstyle[properties[i]] != reference[properties[i]])
{
if (parstyle[properties[i]].hasOwnProperty('name'))
r.push ([properties[i], '"'+parstyle[properties[i]].name+'"']);
else
{
if (parstyle[properties[i]].constructor.name == 'String')
r.push ([properties[i], '"'+parstyle[properties[i]]+'"']);
else
r.push ([properties[i], parstyle[properties[i]]]);
}
}
}
scriptFile = File(app.activeScript.path+'/create_'+parstyle.name+'.jsx');
if (scriptFile.open('w') == false)
{
alert ("Unable to create new script!");
} else
{
d = new Date();
scriptFile.writeln ('//DESCRIPTION: create par style \"'+parstyle.name+'"');
scriptFile.writeln ('// A Jongware Subscript '+d.getDate()+'-'+['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'][d.getMonth()]+'-'+d.getFullYear());
scriptFile.writeln ();
scriptFile.writeln ('with (app.activeDocument.viewPreferences)');
scriptFile.writeln ('// save current measurement units');
scriptFile.writeln ('{\tvar ph = horizontalMeasurementUnits;');
scriptFile.writeln ('\tvar pv = verticalMeasurementUnits;');
scriptFile.writeln ('// set measurement units:');
scriptFile.writeln ('\thorizontalMeasurementUnits = '+app.activeDocument.viewPreferences.horizontalMeasurementUnits+';');
scriptFile.writeln ('\tverticalMeasurementUnits = '+app.activeDocument.viewPreferences.verticalMeasurementUnits+';');
scriptFile.writeln ('};');
scriptFile.writeln ('app.activeDocument.paragraphStyles.add({');
for (i=0; i<r.length; i++)
{
scriptFile.writeln ('\t'+r[i][0]+': '+r[i][1]+',');
}
scriptFile.writeln ('});');
scriptFile.writeln ('// restore original measurement units');
scriptFile.writeln ('with (app.activeDocument.viewPreferences)');
scriptFile.writeln ('{\thorizontalMeasurementUnits = ph;');
scriptFile.writeln ('\tverticalMeasurementUnits = pv;');
scriptFile.writeln ('};');
scriptFile.close();
}
<小时/>
* 我重新解释的 Adobe 官方帮助文件的在线版本,随其 ESTK 一起提供。各种可下载版本可以在 http://www.jongware.com/idjshelp.html 找到。 。麻省理工学院的带宽由 John Hawkinson 先生礼貌提供。
关于javascript - 将 indesign 字符/段落样式导出到 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25962246/