новый фрейм на текущей странице

Статус
Закрыто для дальнейших ответов.

sherwood

Участник
Топикстартер
Сообщения
25
Реакции
0
Подскажите, пожалуйста, какой конструкцией на JavaScript можно указать текущую страницу. Например, мне надо создать новый фрейм, но, на текущей странице. Пробую создать скриптик, который вырезал бы выделенный текст из фрейма и вставлял его в новый рядом.
 

sakhar

Professional
15 лет на форуме
Сообщения
1 550
Реакции
134
Ответ: новый фрейм на текущей странице

См. описание конструкции Page.

TextFrames[0].parent.name - номер страницы, на которой лежит фрейм.
 

kaatm

15 лет на форуме
Сообщения
1 101
Реакции
19
Ответ: новый фрейм на текущей странице

Немного не так. Не порядковый номер страницы в документе, а ее имя.

Согласитесь, есть разница, получаете ли вы в ответ 1-ю страницу в документе, или страницу «12», с которой он, может быть, начинается.

Естественно, name однозначно определяет страницу документа и работать с ним удобнее.
 

Oleg Butrin

20 лет на форуме
Сообщения
1 991
Реакции
1 222
Ответ: новый фрейм на текущей странице

Привожу типичную ситуацЫю. Тектовый фрейм сгруппирован, группа на нескольких страницах в развороте. Какой там parent.name?
 

sakhar

Professional
15 лет на форуме
Сообщения
1 550
Реакции
134
Ответ: новый фрейм на текущей странице

Oleg Butrin сказал(а):
Привожу типичную ситуацЫю. Тектовый фрейм сгруппирован, группа на нескольких страницах в развороте. Какой там parent.name?
Рискну предположить, что той страницы, на которой лежит большая часть сгрупированного объекта.
 

vbatushev

20 лет на форуме
Сообщения
2 242
Реакции
1 227
Ответ: новый фрейм на текущей странице

Скорее всего та, на которой находится Reference Point.
 

sherwood

Участник
Топикстартер
Сообщения
25
Реакции
0
Ответ: новый фрейм на текущей странице

Пытаюсь со своим корявым английским разобраться в свойствах и методах, но пока плохо получается. Вот, что я наваял. Подскажите, пожалуйста, что неправильно.
Фрейм все равно на первой стр. создается. Как обозначить текущий фрейм, с которым идет операция? Если я правильно понял textFrames[0] обозначает первый фрейм во всей публикации, для которого и ищется родительская страница. Буду весьма признателен за совет :)
var myDocument = app.activeDocument
with(myDocument) {
app.copy();
var myPage = textFrames[0].parent.name
with (myPage){
var myNewFrame = textFrames.add();
with (myNewFrame){
insertionPoints[0].select(1919250519)
app.paste();

}
}
}
 

sakhar

Professional
15 лет на форуме
Сообщения
1 550
Реакции
134
Ответ: новый фрейм на текущей странице

Как-то задача нечетко описана...
Я так понимаю, что у вас выделен некий текстовый фрейм? И нужно его скопировать на этой же странице?
Тогда, например. как-то так:
PHP:
var myDocument = app.activeDocument;
with(myDocument) {
     var myTextFrames = myDocument.selection[0];
     app.copy();
     var myPage = myTextFrames.parent;
     with (myPage){
         app.paste();
     }
}
Если нужно вставлять в определенное место, то нужно указать куда.
 

sherwood

Участник
Топикстартер
Сообщения
25
Реакции
0
Ответ: новый фрейм на текущей странице

Нет, выделен текст во фрейме. Нужно его скопировать, создать новый фрейм и в него вставить. На текущей странице.
Общая проблема такова. Помещаю текст из файла, делаю его на несколько колонок с общим заголовком. Вот этот заголовок в тексте, я вручную обычно вырезаю, вставляю в новый фрейм и его форматирую, как заголовок. Просто хотел эту процедуру автоматизировать :)
 

sakhar

Professional
15 лет на форуме
Сообщения
1 550
Реакции
134
Ответ: новый фрейм на текущей странице

Примерно так:
PHP:
var myDocument = app.activeDocument; 
with(myDocument) { 
    var mySelect = myDocument.selection[0];     	
    var myPage = mySelect.parentTextFrames[0].parent; 
	var myNewFrame = myPage.textFrames.add({geometricBounds:["6p", "6p", "18p", "18p"]});
	myNewFrame.contents = mySelect.contents;
	//Присваиваем стиль к тексту
	myNewFrame.texts[0].appliedParagraphStyle = myDocument.paragraphStyles.item("_osn_text");
	mySelect.contents = ""; //Если нужено удалить исходный текст	
}
 

sherwood

Участник
Топикстартер
Сообщения
25
Реакции
0
Ответ: новый фрейм на текущей странице

Да, работает, спасибо! Теперь попробую сам его доработать. Если что, обращусь еще :)
 

sherwood

Участник
Топикстартер
Сообщения
25
Реакции
0
Ответ: новый фрейм на текущей странице

Вот что у меня получается. Но вот стиль текста в новом фрейме присваивается только первому абзацу. Следующим абзацам присваивается шрифт по умолчанию. Я и со шрифтами и со стилями абзацев манипулировал. Чего-то не въеду никак. Подскажите как всем абзацам фрейма присваивать нужный стиль.
PHP:
var myDocument = app.activeDocument;
myFont = app.fonts.item("Arial Black");
with(myDocument) {
    var mySelect = myDocument.selection[0];         
    var myPage = mySelect.parentTextFrames[0].parent;
    var oldFrame = mySelect.parentTextFrames[0];
    var myNewFrame = myPage.textFrames.add();
    var paragraphCount = mySelect.paragraphs.length;
    strX1 = oldFrame.geometricBounds[1];
			//strVert = oldFrame.texts[0].pointSize;
			//strX2 = oldFrame.texts[0].pointSize;			
			strY1 = oldFrame.geometricBounds[2];
			strX2 = oldFrame.geometricBounds[3];
			strY2 = oldFrame.geometricBounds[0];
			with (myNewFrame){
				geometricBounds = [strY2-3, strX1, strY2-10, strX2];
}
//mySelect.contents.appliedFont = myFont;
    myNewFrame.contents = mySelect.contents;
    
  // myNewFrame.paragraphs.firstItem.appliedFont = myFont;
    myNewFrame.texts[0].appliedParagraphStyle = "основной";
    //myNewFrame.contents.appliedFont = myFont;
  
    
}
Если я правильно понимаю, то конструкция myParagraph = myTextFrame.paragraphs.item(0); указывает на первый абзац (это работает), значит myParagraph = myTextFrame.paragraphs.item(1); - это второй, но скрипт ругается на item(1).
 

Oleg Butrin

20 лет на форуме
Сообщения
1 991
Реакции
1 222
Ответ: новый фрейм на текущей странице

1. myTextFrame.parentStory.appliedParagraphStyle = myStyle;
2. myParagraph = myTextFrame.paragraphs.item(N) -> myParagraph = myTextFrame.paragraphs[N]
 

sherwood

Участник
Топикстартер
Сообщения
25
Реакции
0
Ответ: новый фрейм на текущей странице

PHP:
myNewFrame.contents = mySelect.contents;
    myNewFrame.parentStory.appliedParagraphStyle = "заголовок";
    oldFrame.parentStory.appliedParagraphStyle = "основной";
    myParagraph1 = myNewFrame.paragraphs.item(0);
    myParagraph1.pointSize = 24;
   myParagraph2 = myNewFrame.paragraphs.item(1);
    myParagraph2.pointSize = 14;
    app.cut();
Вот на эту строчку ругается, что, дескать, объект - invalid. myParagraph2.pointSize = 14;
Что я тут не так написал? :). Там, где item(0), все работает.
 

sakhar

Professional
15 лет на форуме
Сообщения
1 550
Реакции
134
Ответ: новый фрейм на текущей странице

sherwood сказал(а):
Вот на эту строчку ругается, что, дескать, объект - invalid. myParagraph2.pointSize = 14;
Что я тут не так написал? :). Там, где item(0), все работает.
А уверены, что есть 2-й параграф в этом фрейме?
 

sherwood

Участник
Топикстартер
Сообщения
25
Реакции
0
Ответ: новый фрейм на текущей странице

Ну, я понял, что paragraph - это абзац, так? Я выделяю в первом фрейме два абзаца и помещаю их во второй.
 

sherwood

Участник
Топикстартер
Сообщения
25
Реакции
0
Ответ: новый фрейм на текущей странице

В первом абзаце кегль меняется, как и задано, а второй остается без именений с вот этой ошибкой.
 

Oleg Butrin

20 лет на форуме
Сообщения
1 991
Реакции
1 222
Ответ: новый фрейм на текущей странице

В пятый раз повторяю, НЕ ИСПОЛЬЗОВАТЬ запись вида myTextFrame.paragraphs.item(1), бо это обращение по ИМЕНИ, а использовать myTextFrame.paragraphs[1] - обращение по номеру.
 

sherwood

Участник
Топикстартер
Сообщения
25
Реакции
0
Ответ: новый фрейм на текущей странице

Ага, спасибо, заработало :)
 

sakhar

Professional
15 лет на форуме
Сообщения
1 550
Реакции
134
Ответ: новый фрейм на текущей странице

buden сказал(а):
Вы для InDn CS2 код приводите?
Да, но для CS тоже сгодится...
 
Статус
Закрыто для дальнейших ответов.