Как очистить все полосы?

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

Ales

Участник
Топикстартер
Сообщения
5
Реакции
0
Как удалить все незакрепленные элементы со всех полос? В идеале - с определенного диапазона.
 
Ответ: Как очистить все полосы?

Скриптом только(если стр. много и CTRL+A - Delete - муторно). Тему переношу в соответствующий раздел.
 
Ответ: Как очистить все полосы?

Код:
StartPage=1; // Первая страница диапазона
EndPage=3; // Последняя страница диапазона
var myDoc=app.activeDocument;

for (var Counter = StartPage; Counter <EndPage ; Counter++) 
    with (myDoc.pages[Counter])
    {    
      var cnt=pageItems.length  
      for   (var i=0; i<cnt;i++)
       
       pageItems[0].remove();
     }
Вот как то так
 
Ответ: Как очистить все полосы?

pageItems[i].remove();
 
Ответ: Как очистить все полосы?

Наверное потому же, почему циклы с такими операциями пускают с конца. :)
А вот в try{}catch(){} завернуть всё-таки надо, потому что надо
удалить все незакрепленные элементы
 
Ответ: Как очистить все полосы?

Код:
StartPage=1; // Первая страница диапазона
EndPage=3; // Последняя страница диапазона
var myDoc=app.activeDocument;

for (var Counter = StartPage; Counter <EndPage ; Counter++) 
    with (myDoc.pages[Counter])
    {    
      var cnt=pageItems.length  
      for   (var i=0; i<cnt;i++)
       
       pageItems[0].remove();
     }
Вот как то так

---------------------------
Adobe InDesign
---------------------------
JavaScript Ошибка!

Номер ошибки: 11274
Сообщение об ошибке: Объект заблокирован.

Engine: main
Файл: C:\Documents and Settings\grachov-av\Application Data\Adobe\InDesign\Version 7.5\ru_RU\Scripts\Scripts Panel\Очистить все страницы.jsx
Строка: 11
Источник: pageItems[0].remove();


InDesign 5.5
 
Ответ: Как очистить все полосы?

Сообщение об ошибке: Объект заблокирован.
А вот в try{}catch(){} завернуть всё-таки надо, потому что надо
Соответственно, должно быть:
Код:
StartPage=1; // Первая страница диапазона
EndPage=3; // Последняя страница диапазона
var myDoc=app.activeDocument;

for (var Counter = StartPage; Counter <EndPage ; Counter++) 
    with (myDoc.pages[Counter])
  {   
      var cnt=pageItems.length  
      for   (var i=0; i<cnt;i++)
     try
     {       
       pageItems[0].remove();
     }catch(e){}
 }

Тьфу точно, а то из цикла вылетит. Исправил
 
Ответ: Как очистить все полосы?

Уже работает, но не на всех страницах удаляет. Указано с 1 по 71 - не очистились страницы 1,5,20,26 и т.п. У них шаблон другой, может в этом дело.
 
Ответ: Как очистить все полосы?

Соответственно, должно быть:

Код:
StartPage=1; // Первая страница диапазонаEndPage=3; // Последняя страница диапазона
var myDoc=app.activeDocument;


for (var Counter = StartPage; Counter <EndPage ; Counter++) 
    with (myDoc.pages[Counter])
  {   
      var cnt=pageItems.length  
      for   (var i=0; i<cnt;i++)
     try
     {       
[B]// если здесь произойдет исключение
// оставшиеся элементы коллекции pageItems не будут уделены[/B]
       pageItems[0].remove();
     }catch(e){}
 }


+четыре символа
 
Ответ: Как очистить все полосы?

Тьфу блин, исправил же, а скобки все равно поставить забыл... ;)
 
Ответ: Как очистить все полосы?

Код:
var myDoc=app.activeDocument;

for (var Counter = StartPage; Counter <EndPage ; Counter++) 
    with (myDoc.pages[Counter])
    {    
      var cnt=pageItems.length  
     for   (var i=0; i<cnt;i++)
     {
     try
     {       
       pageItems[0].remove();
     }catch(e){}
     }
   }
У меня даже были сомнения, что эти конструкции эквивалентны и скобки необязательны. Проверил - нет, скобки действительно нужны.
 
Ответ: Как очистить все полосы?

Вы бы проверили, прежде. Блок try бесполезен: скрипт натыкается на первый залоченный объект и пропускает остальные. Потому что поле исключения pageItems[0] остается тем же pageItem. Евгениус выше намекал вам про обратный обход цикла.
 
Ответ: Как очистить все полосы?

Ну исправьте сами, чтоб работало. Я не уверен, что обратный обход будет корректным.
 
Ответ: Как очистить все полосы?

Может быть вот так попробовать:

Код:
function main() {

var startIndex = new Number(0);
var endIndex = new Number(0);

var itemIndex;
var currentItem;

	for (var pageIndex = startIndex; pageIndex <= endIndex; pageIndex++) {

		for (itemIndex = app.activeDocument.pages[pageIndex].pageItems.length - 1; itemIndex >= 0; itemIndex--) {

			currentItem = app.activeDocument.pages[pageIndex].pageItems[itemIndex];

			if (currentItem.locked) continue;
			else currentItem.remove();
		}
	}
}

main();

AirGraph.
 
Ответ: Как очистить все полосы?

Может все-таки на всякий случай try{}catch(){} оставить?
 
Ответ: Как очистить все полосы?

Мне так всегда казалось, что конструкция try/catch хороша там, где возможны ошибки обращения к объектам, их свойствам и т.п. Здесь, как мне кажется, конфликта возникнуть не может в принципе. Любой PageItem имеет свойство locked, а потому конфликт невозможен. К тому же, как я полагаю, так выполняться будет быстрее.

AirGraph.

ЗЫ: Не, конечно можно начать расширять задачу, заводя разговоры про залоченные слои, итемы на мастер-страницах и в этом духе. Но тогда надо писать нормальное ТЗ, садиться, думать и делать все по-взрослому... ;-)
 
Статус
Закрыто для дальнейших ответов.