Если есть вопросы по скриптам

  • Автор темы Автор темы Oleg Butrin
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
Ответ: Если есть вопросы по скриптам

Сработал вот такой вариант:
var mySel = app.activeDocument.selection[0].parentStory;

А вот этот вариант ошибку не выдал но обработал только треть текста
var mySel = app.activeDocument.selection[0].parentTextFrames[0];
 
Можно ли присвоить шаблонную страницу к диапазону страниц?

Код:
myDoc.Pages(2).AppliedMaster = "B-Master"
пишется Method AppliedMaster or Object Page failed.



Код:
myDoc.Pages.ItemByRange(2, 5).AppliedMaster = "B-Master"
пишется Object doesnt support this property or Method
 
Ответ: Можно ли присвоить шаблонную страницу к диапазону страниц?

В Adobe-примерах для ID CS4 написано так: myPage.appliedMaster = myDocument.masterSpreads.item("B-Master");
 
Ответ: Можно ли присвоить шаблонную страницу к диапазону страниц?

Можно совсем "напрямую":
myPage.appliedMaster = myDocument.masterSpreads.itemByName("B-Master");

Когда-то нарвался на отказ из-за ошибки реализации скриптинга, или еще из-за чего, теперь постоянно использую itemByName в таких случаях.
 
Ответ: Можно ли присвоить шаблонную страницу к диапазону страниц?

Можно совсем "напрямую":
myPage.appliedMaster = myDocument.masterSpreads.itemByName("B-Master");
Сработало, почему-то, только если без ItemByName (иначе Indi CS3 пишет Object doesn't support this property or method). ОК.


Но на комаду для диапазона страниц
Код:
Set myPage = myDoc.Pages.ItemByRange(myDoc.Pages(2), myDoc.Pages(4))
myPage.AppliedMaster = myDoc.MasterSpreads.Item("B-Master")
опять Object doesn't support this property or method
Т.е. на диапазон страниц повестить шаблон одной командой нельзя, только через цикл? (а может диапазон неправильно записан?)
 
Ответ: Можно ли присвоить шаблонную страницу к диапазону страниц?

Бейсик может и не поддерживать ни itemByName, ни itemByRange. На Jav-е всё работает вот так (обратите внимание на регистр букв, здесь это важно):
Код:
myDoc.pages.itemByRange(2, 4).appliedMaster = myDoc.masterSpreads.item("B-Master");
 
Ответ: Можно ли присвоить шаблонную страницу к диапазону страниц?

Бейсик может и не поддерживать ни itemByName, ни itemByRange. На Jav-е всё работает вот так (обратите внимание на регистр букв, здесь это важно):
Код:
myDoc.pages.itemByRange(2, 4).appliedMaster = myDoc.masterSpreads.item("B-Master");

Точно. Про язык-то я забыл.
Пришлось выкручиваться так:
Код:
myJavaScriptString = "app.activeDocument.pages.itemByRange(2, 4).appliedMaster = app.activeDocument.masterSpreads.item(""B-Master"");"
MyValue = myInd.DoScript(myJavaScriptString, idScriptLanguage.idJavascript)
Теперь все ОК (хотя в VBA и есть ItemByRange, но команда .appliedMaster, диапазон, видать, не понимает.
Будем конбинировать.
Спасибо!
Спасибо.
 
Ответ: Можно ли присвоить шаблонную страницу к диапазону страниц?

Вроде как можно считывать кодировку файла:
Код:
myFile.encoding
Но у меня это выражение возвращает пустую строку (Win 7). Это баг или так и должно быть?
 
Ответ: Если есть вопросы по скриптам

Можно получить кодировку файла только после того как вы сами ее укажите. Вообще у файлов нет каких-либо метаданных кроме размера, дат изменения/создания, атрибутов и прав доступа.

Код:
var f = new File('/filename');
f.encoding = 'utf8';
alert(f.encoding);
 
Где найти ПОЛНОЕ описание объектной модели InDesign CS3 JavaCript?

Доброго времени суток :) !
Я новичок в программировании InDesign (а так - программист высокого класса, тем более что JavaScript использую в веб-программировании). Есть проблема - пытаюсь чего-нибудь сделать (в частности, тень для картинки), и вынужден просматривать в ExtendScript объектную модель по кускам. А целостную картинку нигде найти не могу - в смысле, какие объекты от каких наследуют, перечень коллекций и т. д. В общем, я так и не нашел РАБОТАЮЩУЮ ссылку на полное описание DOM для JavaScript. Неужели его нет? Не верится.
Подскажите, пожалуйста! Разумеется, подойдет и английская версия.
Спасибо заранее!
 
Ответ: Если есть вопросы по скриптам

Как назначить CharacterStyles на слово выделенное двумя точками, используя VBS
Код:
Set myCell = myTable.Columns.Item(2).Cells.Item(2)
                        If Not (Trim(CStr(Cell12)) = "") Then
                            myCell.Contents = CStr(Cell12)+[B]". "+[I]CStr(Cell5)[/I]+". "[/B]+CStr(Cell6)+", "+CStr(Cell7)
                            Set MyPar = myCell.Paragraphs.Item(1)
                            MyPar.AppliedParagraphStyle = myDocument.ParagraphStyles.Item("ANONS")
                            myPar.AppliedCharacterStyle = myDocument.CharacterStyles.Item("TEXT")
                            FirstComma = InStr(1, MyPar.Contents, ".")
                            If FirstComma > 2 Then
                                For i = 1 to FirstComma
                                    myPar.Characters.Item(i).AppliedCharacterStyle = myDocument.CharacterStyles.Item("ANONS_SRL")                                    
                                Next
                            End If
                        Else

Вот что у меня есть. Как сделать чтобы значению 5-ой ячейки присваивался другой CharacterStyles?
видимо есть способ используя GREP - myInDesign.FindGrepPreferences.FindWhat = "(?i)[.][A-Z]*?[.]" но не понимаю как это написать.
 
Ответ: Если есть вопросы по скриптам

Дальше дописать:
Код:
myInDesign.ChangeGrepPreferences.AppliedCharacterStyle = "StyleName"
myCell.changeGrep

где myCell — область поиска-замены.
 
Ответ: Если есть вопросы по скриптам

Здравствуйте. Пишу скрипт, в функционал которого должно входить копирование текста из одного фрейма в другой. Как правильно прописать операцию копирования/вставки? Простите, если вопрос глупый, но меня он поставил в тупик :(

Код вида (см. ниже) не работает.

PHP:
 app.activeDocument.pageItems.item("istochnik").parentStory.copy();
 
Ответ: Если есть вопросы по скриптам

Сначала надо выделить нужный текст:
Код:
app.activeDocument.pageItems.item("istochnik").parentStory.select();
Потом скопировать:
Код:
app.copy();
Потом выделить то, куда это надо вставить:
Код:
app.activeDocument.destinationTextFrame.insertionPoints[0].select()
И, наконец, вставить:
Код:
app.paste();

Есть еще способ, работающий с более высокой скоростью — через contents:
Код:
myTextFrame1.contents = myTextFrame2.contents;
Но в этом случае не сохранится форматирование текста.
 
  • Спасибо
Реакции: Klara
Ответ: Если есть вопросы по скриптам

Eugenyus, спасибо что помогли. В этой области скриптописания у меня был пробел ':('
 
Ответ: Если есть вопросы по скриптам

При выделении фрейма с текстом, маркированным в Frame Lable именем "Frame #1" нужно выполнить некую операцию. Если фрейм маркирован другим именем - "Отмена". Никак не получается сделать запрос на содержимое во Frame Lable.

PHP:
if (app.selection[0].item("Frame #1")){
 alert("Frame #1");
 }
 else {
 alert("Выделен не Frame #1");
 }
 
Ответ: Если есть вопросы по скриптам

Есть же для этих целей свойство label, почему не пользуетесь?
var myStr = app.selection[0].label;
if(myStr == "Frame #1") alert("Frame #1") //и т.д
и в предыдущем Вашем вопросе надо было пользоваться методом move(), тогда форматирование сохраняется.
 
Ответ: Если есть вопросы по скриптам

Спасибо. А форматирование сохраняется и при том способе, что был посоветован выше. Но попробую разобраться и с move()
 
Ответ: Если есть вопросы по скриптам

Скорость при использовании move() (при переносе) или duplicate() (при дублировании) в разы выше, чем при использовании команд app.copy() (app.cut()) и app.paste().
 
Статус
Закрыто для дальнейших ответов.