JS. Как сгруппировать два объекта?

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

ragman

Топикстартер
12 лет на форуме
Сообщения
669
Реакции
0
Необходимо сгруппировать текстовый фрейм с картинкой.
Что-то я совсем торможу и не могу понять как это сделать.
Кто знает?
 
Ответ: JS. Как сгруппировать два объекта?

activeDocument.groups.add([Item1, Item2]);
 
Ответ: JS. Как сгруппировать два объекта?

Oleg Butrin сказал(а):
activeDocument.groups.add([Item1, Item2]);
А поподробнее можно? Что-то я пробовал разные написание и кругом ошибки...
Вот есть у меня myTextFrame и myFotoFrame.
Что мне написать?
В описании написано что требуется groupItems типа objects "A list of page items to group." Как создать этот лист?
 
Ответ: JS. Как сгруппировать два объекта?

ragman сказал(а):
А поподробнее можно? Что-то я пробовал разные написание и кругом ошибки...
Вот есть у меня myTextFrame и myFotoFrame.
Что мне написать?
Вот так, допустим:
var myGroup = app.activeDocument.groups.add([myTextFrame,myFotoFrame]);
ragman сказал(а):
В описании написано что требуется groupItems типа objects "A list of page items to group." Как создать этот лист?
В данном случае это список из myTextFrame и myFotoFrame
 
Ответ: JS. Как сгруппировать два объекта?

Items List - это массив объектов. Создается он при вызове в качестве параметра в квадратных скобках.
 
Ответ: JS. Как сгруппировать два объекта?

Вобщем, я не понимаю, что я делаю неправильно.
Вот кусок кода:
PHP:
var myNewTextFrame = myPage.textFrames.add();
...
myFrame = myPage.rectangles.add();
...
myGroup = app.activeDocument.groups.add([myNewTextFrame, myFrame]);
И при группировке получаем скриншот :(
Где я неправ?
 

Вложения

  • err.png
    err.png
    8.6 КБ · Просм.: 777
Ответ: JS. Как сгруппировать два объекта?

ID какой версии?
 

Вложения

  • ver.png
    ver.png
    5.7 КБ · Просм.: 906
Ответ: JS. Как сгруппировать два объекта?

Есть мнение, что ты пытаешься сгруппировать объекты на страницах из разных разворотов, что не возможно. И, сдается мне, это правильное мнение.
 
Ответ: JS. Как сгруппировать два объекта?

Oleg Butrin сказал(а):
Есть мнение, что ты пытаешься сгруппировать объекты на страницах из разных разворотов, что не возможно. И, сдается мне, это правильное мнение.
1. Переменная myPage одна и таже при вставке картинки и текста, т.е. помещаются фреймы на ОДНУ И ТУ ЖЕ страницу.
2. Фреймы перед группировкой сдвигаются так, чтобы верхние левые углы совпадали и лежат один под другим. Как они могут быть на разных разворотах?

Проверил в отладчике - оба объекта выдают по .parent.name стр. 8
 
Ответ: JS. Как сгруппировать два объекта?

Дай нормальный кусок кода. Что гадать? Но ошибку с таким кодом я смог получить только тогда, когда объекты не принадлежат к одному развороту, либо когда один из объектов не pageItem.
 
Ответ: JS. Как сгруппировать два объекта?

Oleg Butrin сказал(а):
Дай нормальный кусок кода. Что гадать? Но ошибку с таким кодом я смог получить только тогда, когда объекты не принадлежат к одному развороту, либо когда один из объектов не pageItem.
PHP:
function placeBox (myTextFrame, myPage) {

	// Для каждого абзаца текста
	for (myCounter = 0; myCounter < myTextFrame.paragraphs.length; myCounter++) {
		myPara = myTextFrame.paragraphs[myCounter];
		if (myPara.appliedParagraphStyle.name == myParagraphStyle){

			// Ищем имя фотографии, вставляем соответствующую картинку 
			// и перемещаем ее в 0,0
			myRegExp = /\d{5}/;
			myText = myPara.contents;
			result = myText.match(myRegExp);
			myFotoName = decodeURI("D:\\Konteyner\\Фото автомобилей\\" + result + ".jpg");
			myFoto = new File(myFotoName);
			myFrame = myPage.rectangles.add();
			with(myFrame) {
				place (myFotoName);
				fit (1718906723);
				strokeColor = app.activeDocument.swatches.item(0);
				move(new Array(0, 0));
			}
			
			// Вырезать текст без концевого символа
			var myText = myPara.characters.itemByRange(0, (myPara.characters.length - 2));
			myText.select(1919250519);
			app.cut();
			// Установить красную строку в 0
			myPara.firstLineIndent = 0;
			myPara.leftIndent = 0;
			myPara.leading = -1;
			//Определяем ширину колонки
			var columnWidth = myTextFrame.textFramePreferences.textColumnFixedWidth;
			// Вставить текстовый фрейм и применить угловые эффекты
			var myNewTextFrame = myPage.textFrames.add();
			with (myNewTextFrame) {
				strokeWeight = myStrokeWeight;
				strokeType = myStyleLine;
				strokeColor = myColorLine;
				//geometricBounds [y1, x1, y2, x2]
				geometricBounds = [0, 0, 100, columnWidth];
				textFramePreferences.insetSpacing = new Array("21", myInsetSpacing, myInsetSpacing, myInsetSpacing);
				insertionPoints[0].select(1919250519);
				app.paste();
				
				
				fit(given = 1718906723);
				geometricBounds = [geometricBounds[0], geometricBounds[1], geometricBounds[2], columnWidth];
			}
			
			// Рамку вставить в исходный текст
			//myNewTextFrame.select(1919250519);
			//myNewSelect = myFrame.select(1633969202);
			
			// Добавить группировку с фотографией
			//myID1 = myNewTextFrame.id;
			//myID2 = myFrame.id;
			
			//myItems = new Array (myDoc.pageItems.itemByID(myID1), myDoc.pageItems.itemByID(myID2)); 
			myGroup = app.activeDocument.groups.add([myNewTextFrame, myFrame]);

			myGroup.select(1919250519);
			
			app.cut();
			myPara.insertionPoints[0].select(1919250519);
			app.paste();
		
		}
	}
}
 
Ответ: JS. Как сгруппировать два объекта?

Вобщем, совместными с Олегом усилиями мы добились нормальной работы при таком коде:
PHP:
myGroup = myPage.groups.add([myNewTextFrame, myFrame]);
 
Ответ: JS. Как сгруппировать два объекта?

ragman сказал(а):
Вобщем, совместными с Олегом усилиями мы добились нормальной работы при таком коде:
PHP:
myGroup = myPage.groups.add([myNewTextFrame, myFrame]);
И верно, при activeDocument.groups.add() группа создается на 1-й странице, что вполне логично. Естественно, когда необходимые для нее Page items находятся на другом развороте, такой код приводит к ошибке
 
Статус
Закрыто для дальнейших ответов.