Basil.js и ExtendScript в Indesign / Как стилизовать текстовые фреймы?

После того, как элементы svg размещены/отрисованы в Indesign, я хочу изменить стиль с некоторых или всех элементов. В моем примере я стилизую текстовые кадры во время их рисования. Мой пример работает.

Но как изменить стиль после размещения текстовых фреймов?

Я хочу использовать угол наклона (применительно к TextFrame) и угол поворота (посмотрите в моем примере -> forLoop)

Я пробовал следующее: r.textFrames.shearAngle=20; и doc.textFrames.add({shearAngle:20}); ...но оба не работают.

    #includepath "~/Documents/;%USERPROFILE%Documents";
    #include "basiljs/bundle/basil.js";

    // this script shows how to load data into 
    // basil for further usage. 
    // The document you are working with needs to be saved at least once. 
    // The data needs to be in a folder next to that document 
    // The folder needs to be named "data" 
    // take a look into the output of the JS console of the ESTK
    function draw() {
      var doc = b.doc();
      b.clear(doc); // clear the doc
      b.units(b.MM); // use MM
      var yTextFrame = 195;
      // get the scripts name// get its containing folder// get the name of the script without the extension // add the .indd to the extension
      var fname = File($.fileName).parent.fsName + '/' + ($.fileName.split('/')[$.fileName.split('/').length - 1]).split('.')[0] + '.indd';
      // and save it
      doc.save(fname, false, 'basil', true); //save the file next to the script

      // code goes here -----------
      var filecontent = b.loadString("data.json"); // load the text file
      b.println(filecontent.constructor.name); // take a look at what kind of content we have
      var json = b.JSON.decode(filecontent); // transform it to JSON
      b.println(json.constructor.name); // take a look again what json is
      b.println(json.description); // print something from the file
      // loop all the entries
      for (var i = 0; i < 5; i++) {
        b.println(json.laundry_care_instructions[i].instruction); // take a look at the entry
        b.println(json.laundry_care_instructions[i].instruction.length); // how many characters does the entry have
        var r =b.text(json.laundry_care_instructions[i].instruction, 10 + 7 * i, yTextFrame, b.width - 20, 7).properties={rotationAngle:90, shearAngle:20};// create a text box with the entry // // The skewing angle applied to the TextFrame 
      }
      // end of your code ---------

    }
    b.go();

person LolaRuns    schedule 19.04.2016    source источник


Ответы (1)


Ты почти понял. В вашем коде переменная r уже является объектом textFrame.

Так должно быть:

r.shearAngle = 20; 

Увидимся завтра на уроке ;-)

Редактировать1:

Как говорится в комментариях. Код

var r = b.text("txt",x,y,width, height).properties = {something:10};

возвращает объект properties. Не TextFrame. Удалите часть .properties и Бенедиктс и мой способ должны работать.

Изменить2:

Способ Бенедикта не работает. Я получаю следующую ошибку.

Error: Object does not support the property or method 'shearAngle'

@Benedikt: shearAngle не является текстовым свойством. Это для элементов страницы, таких как TextFrame, Rectangle, Oval и так далее. Есть ли способ в Basil.js установить такие свойства? А как обстоят дела с вложенными свойствами? Для этого я настрою новый вопрос.

person fabianmoronzirfas    schedule 19.04.2016
comment
Эй, Фабиан, твоя версия звучит логично. но это не работает. странно^^ вот мое решение: doc.textFrames.item(0).shearAngle=20; - person LolaRuns; 19.04.2016
comment
Обычно сокращение b.typo(r, "shearAngle", 20) тоже должно сработать. - person Benedikt Groß; 19.04.2016
comment
Возможно, вызов .properties в конце создает проблему. Попробуйте вывести r в консоль. b.println(r.constructor.name); после вашего var r=… Он должен дать вам TextFrame, если вы получите объект, свойства которого являются проблемой. - person fabianmoronzirfas; 19.04.2016
comment
Вот мой дополнительный вопрос stackoverflow.com/questions/36723099/ - person fabianmoronzirfas; 19.04.2016