Не получается сделать цикл в скрипте. Заранее благодарю

  • Автор темы Автор темы Kamina
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Kamina

Участник
Топикстартер
Сообщения
5
Реакции
0
Здравствуйте! Требуется отдельные абзацы делать кривыми. Методом тыка изменил скрипт, который удаляет текст после конверта в кривые выделение:
-----------------------------------------------------------------------
try{
obj=app.selection[0];
lnCount = obj.lines.length
alert (lnCount)
obj.createOutlines();
obj.remove();
// for (var i = 0; i <= lnCount; i++) {
// alert (i);
// }
i = 0
do {
i += 1;
alert (i)
obj.lines.add()
} while (i <= lnCount)
}catch(e){}

-----------------------------------------------------------------------
строка
alert (i) работает, а obj.lines.add() - нет. Что я делаю неправильно?
Заранее большое спасибо!
 
Ответ: Не получается сделать цикл в скрипте. Заранее благодарю

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

Во-вторых, если я правильно понял ваше описание, вы хотите преобразовать выделенный текст в кривые. В этом случае все строки после

obj.createOutlines();

не нужны
 
Ответ: Не получается сделать цикл в скрипте. Заранее благодарю

Давайте сначала расшифруем.

try{ //"Обертка" для игнорирования ошибок, из-за которой сейчас невозможно эти ошибки отловить
obj=app.selection[0]; //Присвоили переменной выделенный текст
lnCount = obj.lines.length //Посчитали количество строк (не абзацев)
alert (lnCount) //Показали на экран это количество
obj.createOutlines(); //Выделенный текст перевели в кривые...
obj.remove(); //...и удалили
// for (var i = 0; i <= lnCount; i++) {
// alert (i);
// }
i = 0
do {
i += 1;
alert (i) //Вывели значение i
obj.lines.add() //Если бы в начале кода не было try, мы бы здесь получили сообщение об ошибке и остановку выполнения кода
} while (i <= lnCount)
}catch(e){}

А Вам что нужно? Т.е., что Вы имеете изначально, и что нужно получить в результате? Как можно пошаговее, плз.
 
Ответ: Не получается сделать цикл в скрипте. Заранее благодарю

А Вам что нужно? Т.е., что Вы имеете изначально, и что нужно получить в результате? Как можно пошаговее, плз.

Спасибо Вам и всем за отклик!
Мне нужно, чтобы скрипт удалил выделенное и добавил столько линий (пустых параграфов), сколько было удалено после превращения в кривые.
Все это у меня из-за того, что при превращении в кривые ИнДизайн ЦС 3 МЕ оставляет оригинал.

Если можно, покажите пожалуйста, как писать скрипт, чтобы были "окривлены" и удалены только те параграфы, имеющие определенный стиль.

За это вообще гигантское спасибо заранее...
 
Ответ: Не получается сделать цикл в скрипте. Заранее благодарю

при превращении в кривые ИнДизайн ЦС 3 МЕ оставляет оригинал.
http://help.adobe.com/ru_RU/InDesign/5.0/
Преобразование в контуры текста, преобразованного в кривые

По умолчанию преобразование текста в кривые приводит к удалению первоначального текста. Но при желании можно предусмотреть отображение кривых над копией первоначального текста, чтобы избежать потери какой-либо его части.

После выделения символов текста в текстовом фрейме и преобразования их в кривые результирующие кривые становятся привязанными (встроенными) объектами, которые перемещаются вместе с текстом. Преобразованный текст больше не относится к типу TrueType, поэтому его уже нельзя выделять и редактировать инструментом "Текст". Средства верстки также больше не могут применяться. Убедитесь в том, что вас устраивают значения параметров верстки шрифта, преобразуемого в кривые, и обязательно создайте копию первоначального текста.

С помощью инструмента "Выделение" выберите текстовый фрейм или с помощью инструмента "Текст" выделите один или несколько символов.
Выберите "Текст" > "Создать кривые".
Преобразование копии кривых текста в контуры

С помощью инструмента "Выделение" выберите текстовый фрейм или с помощью инструмента "Текст" выделите один или несколько символов.
При выборе меню "Текст" > "Создать кривые" держите нажатой клавишу "Alt" (Windows) или "Option" (Mac OS). Копия создается непосредственно над оригиналом. Можно воспользоваться инструментом "Выделение", чтобы переместить ее в сторону.
В двух словах: когда преобразовываете в кривые, Alt зажимаете? Проверьте код, должен работать как надо, без создания копии:
Код:
obj=app.selection[0];
lnCount = obj.lines.length;
obj.createOutlines();
 
Ответ: Не получается сделать цикл в скрипте. Заранее благодарю

Уважаемый Евгений!
Я, конечно, понимаю, что лучше перейти в ЦС 5 и все такое. Но к сожалению, условия получились такие. Работаю в ЦС3 МЕ. Он не удаляет текст после "окривления". Я нашел скрипт CreateOutlinesRemoveOriginal (спасибо автору!). Но делаю большие книги - и очень много рутины.

Убирать оригинал долго, поэтому хотел, чтобы после удаления текста (скажем, выделяю 11 строк, получаю кривые на пол страницы, а под ними - следующие 11 строк текста) скрипт добавил нужное количество пустых абзацев, и все. Но никак не получается...

Я этот LnCount добавил, чтобы указать скрипту, сколько надо добавить линий. Строка алерт (и) работает - он появляется столько раз, сколько нужно. Но почему-то следующя строка не работает. Я с ДжаваСкриптом буквально вчера познакомился.

Надеюсь, меня поймут правильно.
 
Ответ: Не получается сделать цикл в скрипте. Заранее благодарю


Не по теме:
В моей ссылке цифры 5.0 — это как раз и есть версия ЦС3, выдержка приведена из руководства к этой версии, и никакого намека на ЦС5 я не давал. Сам работаю в ЦС3, почему и удивлен, что остается копия текста, потому как проверял.

Раз у Вас надо удалять текст и добавлять пустые строки, предлагаю такой путь:
Код:
var mySel = app.activeDocument.selection[0];
var myPars = mySel.paragraphs;
var obj= mySel.characters.itemByRange(myPars[0].characters[0],myPars[-1].characters[-2]);
lnCount = mySel.lines.length;
obj.createOutlines()
var myZam = "";
for (i=0;i<lnCount-1;i++){
	myZam += "\n";
	}
obj.contents = myZam;
Такое обращение к объектам нужно для того, чтобы при замене выделенного текста (с символом конца абзаца — это важно) следующий за ним абзац не подхватывал свойства удаленного абзаца. А так как удаляемый абзац может иметь отступы сверху-снизу, то простой "ENTER" тут не прокатит — строки надо добавлять принудительным разрывом (Shift-ENTER; в скрипте — \n).
 
Ответ: Не получается сделать цикл в скрипте. Заранее благодарю

Еще два момента.
Попробуйте строку конвертации в кривые набрать так:
Код:
obj.createOutlines([B]true[/B])
Возможно так кривые станут на место текста, и его не придется удалять.
Если не сработает, то тогда второе: не проще ли вместо удаления текста дать ему цвет None:
Код:
obj.fillColor = "None";
 
Ответ: Не получается сделать цикл в скрипте. Заранее благодарю

Здравствуйте Евгений! Огромное Вам спасибо! Все четко заработало.

А насчет ЦС5 извините, увидел в конце линка http://help.adobe.com/ru_RU/InDesign/5.0/ цифру 5 и даже удосужился открыть. Может быть, я что-то неправильно делаю, но мой МЕ упорно отказывается удалить оригинал, оставляет на месте. А иногда трудно заметить под кривыми оригинал и типография возвращает. Вот теперь все прекрасно.
Если Вас не затруднит, помогите пожалуйста, насчет добавления в этот скрипт возможности поиска определенного стиля и удалить абзацы только с такими стилями.
С уважением, Озод Мунаввар. Ташкент.
 
Ответ: Не получается сделать цикл в скрипте. Заранее благодарю

Здесь не так всё просто. Выделенный текст состоит из объектов (символов, слов, абзацев...), каждый из которых имеет свой некий индекс. При изменении количества объектов происходит путаница в индексации, и после удаления первого абзаца скрипт не найдет все остальные. Всё это приходится учитывать через переприсвоение объектов, пересчет и повторный поиск после каждого такого удаления (хотя допускаю, что могу чего-то не знать). Если такой вариант подойдет, то могу предложить (еще раз) назначить этому тексту цвет None:
Код:
var myObj=app.activeDocument.selection[0].paragraphs;
var mySelPars = [];
for (i=0;i<myObj.length;i++){
	if (myObj[i].appliedParagraphStyle.name == "Стиль1"){
		mySelPars[mySelPars.length] = myObj[i];
		}
	}
for (i=0;i<mySelPars.length;i++){
	mySelPars[i].createOutlines();
	mySelPars[i].fillColor = "None";
	}
 
Ответ: Не получается сделать цикл в скрипте. Заранее благодарю

Если цикл прокручивать не с первой строки, а с последней, то многие проблемы станут неактуальными.
 
Статус
Закрыто для дальнейших ответов.