【问题标题】:exporting indesign character / paragraph styles to javascript将 indesign 字符/段落样式导出到 javascript
【发布时间】:2014-09-29 06:33:36
【问题描述】:

如果我设置了文档的段落/字符样式,如何将它们导出到 javascript,以便可以通过 javascript 脚本重新创建它们?

【问题讨论】:

  • 字符样式(通常)只有一小部分属性,但段落样式大约有 180 个。你需要它们吗?那么基于另一种风格的风格呢——你的风格是否也需要复制“父母”,还是独立的?
  • 我不需要所有属性,也不介意父关系,但在 InDesign 中设置段落样式后,必须为段落样式编写 15-20 行左右的 javascript ,所以 InDesign-to-Javascript 方法会很好。

标签: javascript export adobe-indesign


【解决方案1】:

字符和段落样式中的独特属性数量非常多;在 CS4 中,大约 170 个段落,大约 80 个字符。这包括熟悉的(nametracking)和奇异的(otfTitlingunderlineGapOverprintgradientStrokeLength)。幸运的是,很少需要一个样式的精确 克隆(包括其所有属性的所有)。此外,通常一个字符样式只定义几个属性。

从无到有创建样式的最简单方法是为所有值假定合理的默认值,并且只设置有偏差的属性。

不过,有一些注意事项。某些属性需要在其他地方创建新项目——例如样式的fillColor。脚本是否也应该重新创建这种颜色?如果它已经存在,但具有不同的颜色模型怎么办? (它应该使用现有的,覆盖它,还是创建一种新颜色?)如果颜色 value 存在 - 但使用另一个名称怎么办? (它应该扫描现有列表以查找匹配项吗?)“父”样式也是如此;如果需要创建整个样式树怎么办? dropCapStylenestedStylesnestedGrepStylesnestedLineStyles 呢?这些需要重新创建它们的字符样式吗?

另一个潜在的缺陷是使用的测量单位。有些属性是“绝对的”,例如pointSize;其他取决于水平 (leftIndent) 或垂直 (spaceBefore) 规则设置。 (我下面的脚本在脚本运行时保存正在使用的单位,并在完成后恢复它们。)

以下脚本编写了一个新脚本,该脚本定义了一个属性列表,您可以轻松地编辑和附加这些属性(牢记上述注意事项)。可以在 ESTK 帮助菜单中找到所有段落/字符样式属性的完整列表,或在线访问 ParagraphStyleCharacterStyle*。

这只是一个基本框架,可以很容易地适应其他用途。请注意,使用某个样式名称是硬编码的; Body Text -- 可以替换为

var parstyle = app.selection[0].appliedParagraphStyle;

如果您想在带样式的段落内单击以保存其样式。也可以调整创建字符样式,此时需要测试一个属性是否undefined,即是否不是override。

//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();
}

* 我对 Adob​​e 官方帮助文件的重新解释的在线版本,与他们的 ESTK 一起提供。各种可下载版本可在http://www.jongware.com/idjshelp.html 找到。麻省理工学院的带宽由 John Hawkinson 先生礼貌地提供。

【讨论】:

    猜你喜欢
    • 2013-09-23
    • 2023-04-01
    • 1970-01-01
    • 2021-09-28
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多