boriskasmoscow
15 лет на форуме
- Сообщения
- 343
- Реакции
- 410
В каком месте затык?Целый день бьюсь - ничего не получается Как мне теперь найденные слова сохранить столбиком в отдельном документе (файле)?
В каком месте затык?Целый день бьюсь - ничего не получается Как мне теперь найденные слова сохранить столбиком в отдельном документе (файле)?
Во всех . Когда у меня не получается найти решение в сети, я пытаюсь найти его в единственной книжке, которая у меня есть: М.Борисов "Скрипты в InDesign". Вот пример из этой книжки:В каком месте затык?
myTextFrame.parentStory.insertionPoints.items (-1) .contents = "Привет";
myTextFrame.parentStory.insertionPoints.items (-1) .contents = "\r";
myTextFrame.parentStory.insertionPoints.items (-1) .contents = "Как дела?";
// Ищем английскую букву 'a' в тексте, по ней определяем слово, потом слова перегружаем в массив myArr
// Внимание! В данном примере если в слове две искомые буквы, то это слово будет занесено в массив 2 раза\
// Далее массив сбрасывается в новый документ
app.changeGrepPreferences = app.findGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = 'a';
myDoc = app.activeDocument;
myArr = []; // массив для сбора найденных слов
myFoundItems = myDoc.findGrep();
if(myFoundItems.length != 0)
{
for (var i=1; i<myFoundItems.length; i++)
{
myFoundItem = myFoundItems[i];
myArr.push(myFoundItem.words[0].contents + '\r');
}
}
// Начинаем создавать новый документ
myNewDocument = app.documents.add();
myTextFrame = myNewDocument.pages.item(0).textFrames.add();
myTextFrame.geometricBounds = myGetBounds(myNewDocument, myNewDocument.pages.item(0));
with(myTextFrame)
{
textFramePreferences.textColumnCount = 3;
textFramePreferences.textColumnGutter = 12;
textFramePreferences.insetSpacing = [0, 0, 0, 0];
}
myTextFrame.contents = myArr.join('');
AutoFlowDocument(myNewDocument, myTextFrame);
function myGetBounds(myDocument, myPage){
// Функция от Adobe
var myPageWidth = myDocument.documentPreferences.pageWidth;
var myPageHeight = myDocument.documentPreferences.pageHeight
if(myPage.side == PageSideOptions.leftHand){
var myX2 = myPage.marginPreferences.left;
var myX1 = myPage.marginPreferences.right;
}
else{
var myX1 = myPage.marginPreferences.left;
var myX2 = myPage.marginPreferences.right;
}
var myY1 = myPage.marginPreferences.top;
var myX2 = myPageWidth - myX2;
var myY2 = myPageHeight - myPage.marginPreferences.bottom;
return [myY1, myX1, myY2, myX2];
}
function AutoFlowDocument(doc, textFrame)
{
// Автоматически добавляем страницы, если текст не поместиля во фрейм
var overset = textFrame.overflows;
var prevFrame = textFrame;
while(overset)
{
var pg = doc.pages.add(LocationOptions.AT_END);
var newFrame = pg.textFrames.add();
with(newFrame)
{
var myBounds = myGetBounds(doc, pg);
geometricBounds = myBounds;
textFramePreferences.textColumnCount = 3;
textFramePreferences.textColumnGutter = 12;
textFramePreferences.insetSpacing = [0, 0, 0, 0];
}
prevFrame.nextTextFrame = newFrame;
overset = newFrame.overflows;
prevFrame = newFrame;
}
}
Пока еще в детали не вгрызался, но в проверочной фразе "Праверяем работу скрипта поиска буквы а" (я знаю, как правильно пишется слово "проверяем" ) , он первое слово не нашел (или нашел, но не сохранил). Может быть, из-за заглавной первой буквы? А в принципе, это именно то, что мне нужно! Проверил, оказалась заглавная буква не причем, просто он "не любит" первое слово . А, нашел, в строке:Не items а item, вроде...
Вот пример кода как найденные слова сбросить в новый indesign-document
Код:// Ищем английскую букву 'a' в тексте, по ней определяем слово, потом слова перегружаем в массив myArr // Внимание! В данном примере если в слове две искомые буквы, то это слово будет занесено в массив 2 раза\ // Далее массив сбрасывается в новый документ app.changeGrepPreferences = app.findGrepPreferences = NothingEnum.nothing; app.findGrepPreferences.findWhat = 'a'; myDoc = app.activeDocument; myArr = []; // массив для сбора найденных слов myFoundItems = myDoc.findGrep(); if(myFoundItems.length != 0) { for (var i=1; i<myFoundItems.length; i++) { myFoundItem = myFoundItems[i]; myArr.push(myFoundItem.words[0].contents + '\r'); } } // Начинаем создавать новый документ myNewDocument = app.documents.add(); myTextFrame = myNewDocument.pages.item(0).textFrames.add(); myTextFrame.geometricBounds = myGetBounds(myNewDocument, myNewDocument.pages.item(0)); with(myTextFrame) { textFramePreferences.textColumnCount = 3; textFramePreferences.textColumnGutter = 12; textFramePreferences.insetSpacing = [0, 0, 0, 0]; } myTextFrame.contents = myArr.join(''); AutoFlowDocument(myNewDocument, myTextFrame); function myGetBounds(myDocument, myPage){ // Функция от Adobe var myPageWidth = myDocument.documentPreferences.pageWidth; var myPageHeight = myDocument.documentPreferences.pageHeight if(myPage.side == PageSideOptions.leftHand){ var myX2 = myPage.marginPreferences.left; var myX1 = myPage.marginPreferences.right; } else{ var myX1 = myPage.marginPreferences.left; var myX2 = myPage.marginPreferences.right; } var myY1 = myPage.marginPreferences.top; var myX2 = myPageWidth - myX2; var myY2 = myPageHeight - myPage.marginPreferences.bottom; return [myY1, myX1, myY2, myX2]; } function AutoFlowDocument(doc, textFrame) { // Автоматически добавляем страницы, если текст не поместиля во фрейм var overset = textFrame.overflows; var prevFrame = textFrame; while(overset) { var pg = doc.pages.add(LocationOptions.AT_END); var newFrame = pg.textFrames.add(); with(newFrame) { var myBounds = myGetBounds(doc, pg); geometricBounds = myBounds; textFramePreferences.textColumnCount = 3; textFramePreferences.textColumnGutter = 12; textFramePreferences.insetSpacing = [0, 0, 0, 0]; } prevFrame.nextTextFrame = newFrame; overset = newFrame.overflows; prevFrame = newFrame; } }
for (var i=1; i<myFoundItems.length; i++)
Но, все-таки, осталась одна проблема. Почему, собственно я и начал ковыряться с примером из книжки М.Борисова. Мне нужно, чтобы словарь можно было пополнять. Т.е. если я запускаю скрипт с новым текстом, найденные слова сохранялись бы не в новом документе, а добавлялись бы к уже существующему. Если можно, подскажите, пожалуйста, как доработать ваш скрипт, чтобы он мог так делать?Не items а item, вроде...
Вот пример кода как найденные слова сбросить в новый indesign-document
Еще вопрос, функция,
В этом скрипте где-то зарыта ошибка, но где я откопать не смог, где-то в части добавления страниц. Если проверять работу скрипта на маленьких текстах, то все нормально. А если текст чуть побольше, настолько, что требует для создания нового документа более 4-х страниц, то содержимое фреймов накладывается друг на друга, начиная со второй страницы. Где ошибка? Да, и текст помещается только на левую страницу разворота.Не items а item, вроде...
Вот пример кода как найденные слова сбросить в новый indesign-document
Код:// Ищем английскую букву 'a' в тексте, по ней определяем слово, потом слова перегружаем в массив myArr // Внимание! В данном примере если в слове две искомые буквы, то это слово будет занесено в массив 2 раза\ // Далее массив сбрасывается в новый документ app.changeGrepPreferences = app.findGrepPreferences = NothingEnum.nothing; app.findGrepPreferences.findWhat = 'a'; myDoc = app.activeDocument; myArr = []; // массив для сбора найденных слов myFoundItems = myDoc.findGrep(); if(myFoundItems.length != 0) { for (var i=1; i<myFoundItems.length; i++) { myFoundItem = myFoundItems[i]; myArr.push(myFoundItem.words[0].contents + '\r'); } } // Начинаем создавать новый документ myNewDocument = app.documents.add(); myTextFrame = myNewDocument.pages.item(0).textFrames.add(); myTextFrame.geometricBounds = myGetBounds(myNewDocument, myNewDocument.pages.item(0)); with(myTextFrame) { textFramePreferences.textColumnCount = 3; textFramePreferences.textColumnGutter = 12; textFramePreferences.insetSpacing = [0, 0, 0, 0]; } myTextFrame.contents = myArr.join(''); AutoFlowDocument(myNewDocument, myTextFrame); function myGetBounds(myDocument, myPage){ // Функция от Adobe var myPageWidth = myDocument.documentPreferences.pageWidth; var myPageHeight = myDocument.documentPreferences.pageHeight if(myPage.side == PageSideOptions.leftHand){ var myX2 = myPage.marginPreferences.left; var myX1 = myPage.marginPreferences.right; } else{ var myX1 = myPage.marginPreferences.left; var myX2 = myPage.marginPreferences.right; } var myY1 = myPage.marginPreferences.top; var myX2 = myPageWidth - myX2; var myY2 = myPageHeight - myPage.marginPreferences.bottom; return [myY1, myX1, myY2, myX2]; } function AutoFlowDocument(doc, textFrame) { // Автоматически добавляем страницы, если текст не поместиля во фрейм var overset = textFrame.overflows; var prevFrame = textFrame; while(overset) { var pg = doc.pages.add(LocationOptions.AT_END); var newFrame = pg.textFrames.add(); with(newFrame) { var myBounds = myGetBounds(doc, pg); geometricBounds = myBounds; textFramePreferences.textColumnCount = 3; textFramePreferences.textColumnGutter = 12; textFramePreferences.insetSpacing = [0, 0, 0, 0]; } prevFrame.nextTextFrame = newFrame; overset = newFrame.overflows; prevFrame = newFrame; } }
myNewDocument = app.documents.add();
myNewDocument.viewPreferences.rulerOrigin = RulerOrigin.PAGE_ORIGIN;
Да, теперь все замечательно. Как бы теперь разобраться, что это значит, и как можно было бы догадаться, что без этого работать будет с ошибкой?Скорее всего, после строки
надо добавитьКод:myNewDocument = app.documents.add();
Код:myNewDocument.viewPreferences.rulerOrigin = RulerOrigin.PAGE_ORIGIN;
Давай я поищу в Google вместо тебяКак бы теперь разобраться,
Ага. Если бы я был такой умныйДавай я поищу в Google вместо тебя
Посмотреть вложение 74707
"Программное" нажатие правой кнопкой на линейке и выбор этих параметров:
Посмотреть вложение 74708
В любой программе редактирования шрифтов (например, FontLab Studio) открываете выбранный для редактирования шрифт, (например, School) , над всеми гласными прорисовываете ударение и сохраняете этот шрифт с новым названием (например New_School). Вуа ля@Сергий Задонский, а можете поделиться тем какие технологии используются, чтобы сделать, то о чём Вы писали - "На основе выбранного для издания шрифта (Font), создаем шрифт (NewFont), в котором все гласные с ударением"?
В общем-то не очень сложно, но если вы не знакомы с фонтлабом, сразу может и не получиться. Потому как, когда я написал "...сохраняете с новым названием...", это не просто кликнуть по "сохранить как". Т.е. сначала шрифт нужно сгенерировать, а перед тем, прописать необходимую инфу во вкладке "font info", иначе он может не встать. В-общем, экспериментируйте и помогай вам Бог!@Сергий Задонский, Просто я плохо представляю, насколько трудоёмок этот процесс...