Вставка слова со следующей страницы

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

Sashalvov

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

Автоматически — никак.
Более того, некоторое время назад при попытке заказать соответствующий плагин, обнаружилось, что и такой возможности не подразумевает Adobe InDi SDK.
Пришлось выкручиваться скриптом.
Поскольку последний имеет совсем нетоварный вид, предложить его всем не могу.
Если есть желание разбираться в скрипте, пишите в личку.
 
Ответ: Вставка слова со следующей страницы

Автоматически — никак.
Более того, некоторое время назад при попытке заказать соответствующий плагин, обнаружилось, что и такой возможности не подразумевает Adobe InDi SDK.

Максим, ты немного исковеркал мой ответ.
У тебя задача была:
а) взять текст;
б) вставить его в колонтитул;
в) применить к нему исходное форматирование.

Так вот пункты а и б - на это есть методы в СДК
на пункт в - нет. Возможно только применение "местного" форматирования.
 
Ответ: Вставка слова со следующей страницы

Что подразумевается под "местным" форматированием?
 
Ответ: Вставка слова со следующей страницы

Это значит, что форматирование задается местно, то есть уже в колонтитуле, а не берется из источника, то есть со следующей страницы.
 
Ответ: Вставка слова со следующей страницы

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

По идее, цепи не должно быть вобще. На мастере должен быть фрейм с переменной. В нем и задается форматирование. А вот уже если его нужно изменить, тогда на конкретной странице этот фрейм отделяется от мастера и вносятся локальные изменения.
Реализовать при помощи плагина, программирование которого нужно кому-то заказать, например, Strizh-у, автора поста #3 в текущей теме.
Если вопрос будет реализван при помощи плагина, при изменении расположения текста автоматом будет меняться колонтитул.
 
Ответ: Вставка слова со следующей страницы

Код:
var myTF = app.activeDocument.selection[0].parentStory.texts[0].parentTextFrames;
for (i=0;i<myTF.length;i++){
	myTF[i].label = "MainText";
	}
var myPages = app.activeDocument.pages;
for (i=0;i<myPages.length-1;i++){
	try{
		myPages[i].textFrames.item("NextPageFirstWord").contents = myPages[i+1].textFrames.item("MainText").words[0].contents;
		}
	catch (e){
		myPages[i].textFrames.add({geometricBounds:[250,20,260,70], appliedObjectStyle:app.activeDocument.objectStyles.item("NextPageFirstWord"), contents: myPages[i+1].textFrames.item("MainText").words[0].contents, label:"NextPageFirstWord"});
		}
	}
Скрипт в таком виде работает при условии, что имеем один материал, который проходит по всей книге по всем страницам.
Перед запуском скрипта нужно:
1. создать объектный стиль с именем NextPageFirstWord для текстового фрейма, в который должно вставляться слово;
2. В параметрах (Preferences) во вкладке Units & Increments/Ruler Units/Origin выставить Page;
3. В строке скрипта geometricBounds:[250,20,260,70] выставить точные координаты (Y1,X1,Y2,X2) для фрейма со словом, где Y1,X1 — верхний левый угол, Y2,X2 — правый нижний угол фрейма.
4. Установить курсор в текст, из которого должны браться слова.

При первом запуске скрипт создает на каждой странице фреймы и вписывает первое слово следующей страницы.
При повторном запуске скрипт использует уже существующие фреймы, заменяя содержимое.

Проверяйте на копии файла.
 
  • Спасибо
Реакции: dega
Ответ: Вставка слова со следующей страницы

Что-то не получается. При запуске скрипта в ИД выдает ошибку в первой строке undefined. В ExtendScript тоже при отладке зависает на первой строке: undefined is not an object.
 
Ответ: Вставка слова со следующей страницы

П.4 из инструкции в посте 8 выполнен?
 
Ответ: Вставка слова со следующей страницы

Огромное спасибо!
Все заработало, прозевал п.4.

Есть еще одно пожелание. Если последнее слово имеет перенос, то во фрейм оно вставляется полностью. Возможно ли вставлять только вторую часть?
 
Ответ: Вставка слова со следующей страницы

Та можно в принципе, только с ходу в это время суток чего-то не придумывается.:)

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

Не по теме:
Да оно не хорошо, но что делать при верстке 36 пт на А-4? Увеличеный трекинг при двух словах в строке, зрелище довольно грустное.
 
Ответ: Вставка слова со следующей страницы

Проблема: Скрипт работает хорошо при одинаковых внешних и внутренних полях. При разности полей фреймы на одних страницах смещаются.
 
Ответ: Вставка слова со следующей страницы

Код:
var GBLeft = [250,20,260,70];
var GBRight = [250,15,260,70];
var myGB = new Array();
var myTF = app.activeDocument.selection[0].parentStory.texts[0].parentTextFrames;
for (i=0;i<myTF.length;i++){
	myTF[i].label = "MainText";
	}
var myPages = app.activeDocument.pages;
for (i=0;i<myPages.length-1;i++){
	try{
		myPages[i].textFrames.item("NextPageFirstWord").contents = myPages[i+1].textFrames.item("MainText").words[0].contents;
		}
	catch (e){
				if (i%2 == 0){myGB = GBRight;} else {myGB = GBLeft;}
		myPages[i].textFrames.add({geometricBounds:myGB, appliedObjectStyle:app.activeDocument.objectStyles.item("NextPageFirstWord"), contents: myPages[i+1].textFrames.item("MainText").words[0].contents, label:"NextPageFirstWord"});
		}
	}
В первой и второй строках задайте координаты для левой и правой страниц отдельно.
Это не фреймы смещаются. Это они визуально выглядят смещенными относительно полей.

PS. Вам скорее всего потребуется удалить старые фреймы. Это можно сделать так:
Код:
app.activeDocument.textFrames.item("NextPageFirstWord").remove();
 
Ответ: Вставка слова со следующей страницы

Спасибо!
 
Ответ: Вставка слова со следующей страницы

Eugenyus, для определения правая или левая страница есть свойства PageSideOptions: напр.: if(myPage.side == PageSideOptions.leftHand){...
 
Ответ: Вставка слова со следующей страницы

Если последнее слово имеет перенос, то во фрейм оно вставляется полностью. Возможно ли вставлять только вторую часть?
Код:
var GBLeft = [287,0,297,90];
var GBRight = [287,120,297,205];
var myGB = new Array();
var myTF = app.activeDocument.selection[0].parentStory.texts[0].parentTextFrames;
for (i=0;i<myTF.length;i++){
	myTF[i].label = "MainText";
	}
var myPages = app.activeDocument.pages;

//************Изменения начинаются отсюда************//
for (i=0;i<myPages.length-1;i++){
	var myText = String(myPages[i+1].textFrames.item("MainText").texts[0].contents);
	var myWords = myText.split(" "); //Признак отдельного слова - обычный пробел
	try{
		myPages[i].textFrames.item("NextPageFirstWord").contents = myWords[0];
		}
	catch (e){
				if (myPages[i].side == PageSideOptions.RIGHT_HAND){myGB = GBRight;} else {myGB = GBLeft;}
		myPages[i].textFrames.add({geometricBounds:myGB, appliedObjectStyle:app.activeDocument.objectStyles.item("NextPageFirstWord"), contents: myWords[0], label:"NextPageFirstWord"});
		}
	
	//Контроль неразрывных пробелов и слов за ними, и знаков припинания, попавших во фрейм
	app.findGrepPreferences = app.changeGrepPreferences = null; 
	
	app.findGrepPreferences.findWhat = "\\s.+";
	myPages[i].textFrames.item("NextPageFirstWord").changeGrep();
	
	app.findGrepPreferences.findWhat = "[[:punct:]]";
	myPages[i].textFrames.item("NextPageFirstWord").changeGrep();
	}
 
Ответ: Вставка слова со следующей страницы

А так не проще?
...
myWords = myPages[i+1].textFrames.item("MainText").lines[0].contents.split(/\s/);
myWords[0] = myWords[0].replace(/\.|\,|!/gi, ""); // в replace добавить других знаков препинания при необходимости
// Grep не нужен.
 
Ответ: Вставка слова со следующей страницы

Проще.:)
Ну я не буду еще раз дублировать весь код, ладно? В любом случае оба варианта скрипта рабочие, осталось дождаться, что скажет ТС.

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