我正在创建一个在 InDesign 中使用的小脚本,以便能够读取 .txt 文件并创建不同宽x高和出血等的多个 .indd 文件。这是一个 Javascript .js 文件。
到目前为止,我设法让脚本完全正常工作,但当我尝试使用 Scrip UI 功能对其进行美化时,它似乎就死了。没有错误或崩溃,只是什么都没有。
这是有问题的代码。工作版本基本相同,但运行时没有 UI 功能。如果有人能告诉我哪里出错了,我将不胜感激。我已经来来回回这段代码 100 次了,但无法生成文件。
如果有帮助: 这个想法是能够从客户那里接收电子表格,并向工作室提供一组“预先设置”的 indesign 文件。因此需要出血设置和网页版本。
我需要几周时间才能学习任何类型的编码,因为我来自印前美术背景。因此,非常感谢任何与查询相关的建议。
var dialog = new Window("dialog");
dialog.text = "Doc Builder";
dialog.orientation = "column";
dialog.alignChildren = ["left","top"];
dialog.spacing = 10;
dialog.margins = 16;
// TXTPANEL
// ========
var txtPanel = dialog.add("panel", undefined, undefined, {name: "txtPanel"});
txtPanel.orientation = "row";
txtPanel.alignChildren = ["left","top"];
txtPanel.spacing = 0;
txtPanel.margins = 10;
var txtCopy = txtPanel.add("statictext", undefined, undefined, {name: "txtCopy"});
txtCopy.text = "Select your txt file:";
txtCopy.preferredSize.width = 200;
var txtButton = txtPanel.add("button", undefined, undefined, {name: "txtButton"});
txtButton.text = "Select";
txtButton.onClick = function () {var file = File.openDialog("Select Your Text File (Must be a .txt format)", undefined, false);}
// FOLDERPANEL
// ===========
var folderPanel = dialog.add("panel", undefined, undefined, {name: "folderPanel"});
folderPanel.orientation = "row";
folderPanel.alignChildren = ["left","top"];
folderPanel.spacing = 0;
folderPanel.margins = 10;
var folderCopy = folderPanel.add("statictext", undefined, undefined, {name: "folderCopy"});
folderCopy.text = "Select a folder destination";
folderCopy.preferredSize.width = 200;
var folderButton = folderPanel.add("button", undefined, undefined, {name: "folderButton"});
folderButton.text = "Select";
folderButton.onClick = function () {var folder = Folder.selectDialog("Select the folder where the new documents should be saved");}
// COLOURSPACEPANEL
// ================
var colourSpacePanel = dialog.add("panel", undefined, undefined, {name: "colourSpacePanel"});
colourSpacePanel.text = "Colour Space";
colourSpacePanel.preferredSize.height = 80;
colourSpacePanel.orientation = "row";
colourSpacePanel.alignChildren = ["left","center"];
colourSpacePanel.spacing = 50;
colourSpacePanel.margins = 10;
var printButton = colourSpacePanel.add("radiobutton", undefined, undefined, {name: "printButton"});
printButton.text = "Print";
printButton.value = true;
var webButton = colourSpacePanel.add("radiobutton", undefined, undefined, {name: "webButton"});
webButton.text = "Web";
// BLEEDPANEL
// ==========
var bleedPanel = dialog.add("panel", undefined, undefined, {name: "bleedPanel"});
bleedPanel.text = "Document Bleed";
bleedPanel.orientation = "column";
bleedPanel.alignChildren = ["left","top"];
bleedPanel.spacing = 0;
bleedPanel.margins = 10;
var bleedCopy = bleedPanel.add('edittext {properties: {name: "bleedCopy"}}');
bleedCopy.text = "3mm";
// ENDPANEL
// ========
var endPanel = dialog.add("group", undefined, {name: "endPanel"});
endPanel.orientation = "row";
endPanel.alignChildren = ["left","bottom"];
endPanel.spacing = 20;
endPanel.margins = 0;
var buildButton = endPanel.add("button", undefined, undefined, {name: "buildButton"});
buildButton.text = "Build";
var cancelButton = endPanel.add("button", undefined, undefined, {name: "cancelButton"});
cancelButton.text = "Cancel";
buildButton.onClick = function ()
{
file.open("r");
var content = file.read().split("\n");
for (var i = 0; i < content.length; i++)
{
var curLine = content[i].split("\t");
var width = curLine[0];
var height = curLine[1];
var filename = curLine[2];
docName = filename + "_" + height + "x" + width;
try {
var newDoc = app.documents.add(false);
newDoc.documentPreferences.pageHeight = height;
newDoc.documentPreferences.pageWidth = width;
newDoc.documentPreferences.facingPages = false;
newDoc.documentPreferences.properties =
{
documentBleedUniformSize : true,
documentBleedTopOffset : docBleed
};
newDoc.save(new File(folder + "/" + docName + "mm.indd"));
newDoc.close(SaveOptions.no)
} catch(myError){}
}
}
dialog.show();
尝试了各种修复: 将 onClick 更改为 onmousedown 调整一些动作的顺序
脚本将在 InDesign 的“脚本”面板中可见。 双击后,我希望弹出一个窗口并分配所有参数。 然后一旦用户单击“构建”
它将生成所有文档到选定的目标文件夹中。
如果您想尝试运行实时数据,那么您需要创建一个 3 列 .txt 文件(我从 Excel 导出): A 列:宽度, B 栏:高度, C 列:文件名。
您必须决定它是否应该是“对话框”窗口的“调色板”?他们的工作方式不同。对话框从界面获取信息,并在对话框窗口关闭后运行(在本例中使用“构建”按钮)。调色板始终保留在屏幕上,每次单击其按钮时都可以获取一些信息并执行工作,直到您使用“取消”按钮或其他方式关闭调色板。
这是用作调色板的代码的固定变体:
#targetengine 'session'
var file, folder;
var palette = new Window("palette");
palette.text = "Doc Builder";
palette.orientation = "column";
palette.alignChildren = ["left","top"];
palette.spacing = 10;
palette.margins = 16;
// TXTPANEL
// ========
var txtPanel = palette.add("panel", undefined, undefined, {name: "txtPanel"});
txtPanel.orientation = "row";
txtPanel.alignChildren = ["left","top"];
txtPanel.spacing = 0;
txtPanel.margins = 10;
var txtCopy = txtPanel.add("statictext", undefined, undefined, {name: "txtCopy"});
txtCopy.text = "Select your txt file:";
txtCopy.preferredSize.width = 200;
var txtButton = txtPanel.add("button", undefined, undefined, {name: "txtButton"});
txtButton.text = "Select";
txtButton.onClick = function () {file = File.openDialog("Select Your Text File (Must be a .txt format)", undefined, false);}
// FOLDERPANEL
// ===========
var folderPanel = palette.add("panel", undefined, undefined, {name: "folderPanel"});
folderPanel.orientation = "row";
folderPanel.alignChildren = ["left","top"];
folderPanel.spacing = 0;
folderPanel.margins = 10;
var folderCopy = folderPanel.add("statictext", undefined, undefined, {name: "folderCopy"});
folderCopy.text = "Select a folder destination";
folderCopy.preferredSize.width = 200;
var folderButton = folderPanel.add("button", undefined, undefined, {name: "folderButton"});
folderButton.text = "Select";
folderButton.onClick = function () {folder = Folder.selectDialog("Select the folder where the new documents should be saved");}
// COLOURSPACEPANEL
// ================
var colourSpacePanel = palette.add("panel", undefined, undefined, {name: "colourSpacePanel"});
colourSpacePanel.text = "Colour Space";
colourSpacePanel.preferredSize.height = 80;
colourSpacePanel.orientation = "row";
colourSpacePanel.alignChildren = ["left","center"];
colourSpacePanel.spacing = 50;
colourSpacePanel.margins = 10;
var printButton = colourSpacePanel.add("radiobutton", undefined, undefined, {name: "printButton"});
printButton.text = "Print";
printButton.value = true;
var webButton = colourSpacePanel.add("radiobutton", undefined, undefined, {name: "webButton"});
webButton.text = "Web";
// BLEEDPANEL
// ==========
var bleedPanel = palette.add("panel", undefined, undefined, {name: "bleedPanel"});
bleedPanel.text = "Document Bleed";
bleedPanel.orientation = "column";
bleedPanel.alignChildren = ["left","top"];
bleedPanel.spacing = 0;
bleedPanel.margins = 10;
var bleedCopy = bleedPanel.add('edittext {properties: {name: "bleedCopy"}}');
bleedCopy.text = "3mm";
// ENDPANEL
// ========
var endPanel = palette.add("group", undefined, {name: "endPanel"});
endPanel.orientation = "row";
endPanel.alignChildren = ["left","bottom"];
endPanel.spacing = 20;
endPanel.margins = 0;
var buildButton = endPanel.add("button", undefined, undefined, {name: "buildButton"});
buildButton.text = "Build";
var cancelButton = endPanel.add("button", undefined, undefined, {name: "cancelButton"});
cancelButton.text = "Cancel";
cancelButton.onClick = function() { palette.close() }
buildButton.onClick = function()
{
file.open("r");
var content = file.read().split("\n");
for (var i = 0; i < content.length; i++)
{
var curLine = content[i].split("\t");
var width = curLine[0];
var height = curLine[1];
var filename = curLine[2];
var docName = filename + "_" + height + "x" + width;
try {
var newDoc = app.documents.add(false);
newDoc.documentPreferences.pageHeight = height;
newDoc.documentPreferences.pageWidth = width;
newDoc.documentPreferences.facingPages = false;
newDoc.documentPreferences.properties =
{
documentBleedUniformSize : true,
documentBleedTopOffset : parseFloat(bleedCopy.text)
};
newDoc.save(new File(folder + "/" + docName + "mm.indd"));
newDoc.close(SaveOptions.no);
} catch(myError){ alert(myError) }
}
}
palette.show();