сценарий indesign - вывод текстового фрейма в активный документ

В моем документе по дизайну у меня около 250 страниц, каждая из которых содержит 1 таблицу (по 1 на страницу). Что я пытаюсь сделать, так это:

  1. Получить значение верхней строки каждой таблицы
  2. Получить первую букву содержимого ячейки
  3. создайте текстовый фрейм на каждой странице для вывода этой буквы

Вот мой код:

var doc = app.activeDocument;  

var myTable = app.activeDocument.stories.everyItem().tables.everyItem().getElements();  
alert(myTable.length)//no. of tables in a document  

for(var i=0; i<myTable.length; i++)  {  
var textFrame = doc.pages[0].textFrames.add();  
var string = myTable[i].contents;
textFrame.properties =  
{  

    geometricBounds : [ 0,0,100,100 ],  
    strokeWidth : 0,  
    fillColor : "None",  
    contents : string

};  
}  

Поскольку это глоссарий, буквы будут A,B,C,D..

Например, первая строка таблицы 1 содержит строку «Другое», поэтому на этой странице в текстовом фрейме в верхнем левом углу будет буква А.

ОБНОВЛЕНИЕ: получить первую букву из каждой таблицы

var myTable = app.activeDocument.stories.everyItem().tables.everyItem().getElements();  
alert(myTable.length)//no. of tables in a document  

for(var i=0; i<myTable.length; i++)  
{  
        var string = myTable[i].contents[0][0];
        alert(string);
}  
Почему ваш код пока не работает так, как вы себе представляете?
Без свойств текстового фрейма мне удалось получить значение из каждой таблицы, но я застрял на получении первой буквы, а затем на создании текстового фрейма.
@ usr2564301 usr2564301: в обновлении вопроса мне удалось получить первую букву каждого из них, есть идеи по созданию нового текстового фрейма на каждой странице с этой буквой? в верхнем левом углу

Ответы (1)

Почти было там!

Я использовал ваш код в качестве основы, и вот что я придумал:

if (parseFloat(app.version) < 6)
    getTableInitials();
else
    app.doScript(getTableInitials, ScriptLanguage.javascript, undefined, UndoModes.fastEntireScript, "Table Initials to Text Frames");


function getTableInitials() {

    var myTable = app.activeDocument.stories.everyItem().tables.everyItem().getElements();
    var myTableCount = myTable.length;

    for (var i = 0; i < myTableCount; i++) {
        var initialLetter = myTable[i].contents[0][0];
        var pageName = myTable[i].parent.parentPage.name;
        var textFrame = app.activeDocument.pages.itemByName(pageName).textFrames.add();
        textFrame.properties = {
            geometricBounds: [0,0,100,100],
            strokeWeight: 0,
            fillColor: "None",
            contents: initialLetter
        };
    }

    alert("Finished! Added " + myTableCount + " text frames.");

}

Этот скрипт создаст текстовый фрейм с начальной буквой для каждой таблицы на одной странице. Неважно, как названы ваши страницы (например, арабские или римские цифры, буквы и т. д.), он должен уловить их все. Я также обернул скрипт в функцию, чтобы fastEntireScriptее можно было вызывать. По крайней мере, это должно дать вам любезность быть всего в одном шаге от отмены сценария, а не количество таблиц × 2 .

Поскольку вы заявили, что ваш документ содержит одну таблицу на странице, проблем быть не должно. Однако, если у вас более одной таблицы, вы получите несколько текстовых фреймов, наложенных друг на друга, каждый из которых содержит начальную букву из соответствующей таблицы.

Обязательно измените свойства текстового фрейма по своему вкусу. Я включил параметры из вашего кода в качестве значений по умолчанию (также исправлен strokeWidthна strokeWeight).

Надеюсь, это поможет!