我正试图想出一个可以加载到InDesign脚本面板中的脚本,但它也会在打开给定文档时运行。
我的文档的名称类似于"REF_ClientRef"
,通常看起来像4294_GEN1
。
我有两个名为REF
和ClientRef
的文本变量,它们表示文件名的第一部分和第二部分。
如何使用文件名的第一部分更新文本变量REF,并使用文件名称的第二部分更新ClientRef
?
这里有两个脚本可以完成这项工作。
主脚本创建或更改变量:
try { var doc = app.activeDocument } catch(e) { exit() }
if (!doc.saved) exit();
// get a name of the current file without .indd
var doc_name = doc.name.replace('.indd', '');
// get a part of the file name before '_' and save it into the variable
var ref = doc_name.split('_')[0];
update_variable('REF', ref);
// try to get a part of the file name after '_' and save it into the variable
try {
var client = doc_name.split('_')[1];
update_variable('ClientRef', client);
} catch (e) {}
// function that changes an existed variable or creates new one
function update_variable(var_name, var_contents) {
try {
var variable = doc.textVariables.itemByName(var_name);
variable.variableOptions.contents = var_contents;
}
catch(e) {
var variable = doc.textVariables.add();
variable.name = var_name;
variable.variableType = VariableTypes.CUSTOM_TEXT_TYPE;
variable.variableOptions.contents = var_contents;
}
}
您可以在任何时候从脚本面板像往常一样运行它。
第二个脚本使InDesing在每次打开任何文档时自动运行主脚本:
#targetengine "onAfterOpen"
app.eventListeners.add('afterOpen', main);
function main() {
app.doScript(File('c:/path_to_the_main_script/main_script.jsx'));
}
您可以手动运行第二个脚本,也可以将其保存到特殊文件夹中。在Windows上,它看起来像这样:
c:Users#username#AppDataRoamingAdobeInDesign#version#en_GBScriptsStartup Scripts
它可能因您的版本、区域设置、操作系统等而异。实际上,它只是一个名为"启动脚本"的文件夹,紧挨着包含其余脚本的文件夹("脚本面板"(。每当启动InDesign时,此文件夹中的任何脚本都会自动运行。
我认为最好限制主脚本,使其仅针对特定文件(例如,特定文件名(或文件夹运行。这取决于您的工作流程。如果你能制定一条规则,我可以试着展示它是如何做到的。