为什么我的 InDesign Javascript 无法完全运行?

问题描述 投票:0回答:1

我正在创建一个在 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 列:文件名。

javascript database adobe-indesign auto-generate
1个回答
0
投票

您必须决定它是否应该是“对话框”窗口的“调色板”?他们的工作方式不同。对话框从界面获取信息,并在对话框窗口关闭后运行(在本例中使用“构建”按钮)。调色板始终保留在屏幕上,每次单击其按钮时都可以获取一些信息并执行工作,直到您使用“取消”按钮或其他方式关闭调色板。

这是用作调色板的代码的固定变体:

#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();
© www.soinside.com 2019 - 2024. All rights reserved.