Выделить графический объект на странице по координате

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

vlmr

Участник
Топикстартер
Сообщения
13
Реакции
0
Приветствую. Есть необходимость находить в многостраничной верстке векторную подлинкованную картинку. Производится заливка в верстку XML с линками в виде inline графики (такие иконки тематические в тексте). Часть иконок "отлетает" на одно и то же расстояние по координате Х. Интересует - можно ли каким то скриптом найти эти "улетевшие" иконки по этой известной координате Х.
 
Может тогда кто подскажет, где в скрипте ниже ошибка?
Почему не выделяется прямоугольник по Х=12?
main();
function main(){
mySnippet();
}
function mySnippet(){
var myPage = app.documents.item(0).pages.item(0);
var myRectangle = myPage.rectangles; {geometricBounds = [undefined, 12, undefined, undefined]};
var myZoom = app.activeWindow.zoomPercentage;
app.selection = null;
app.select(myRectangle);
}
P.S. Скрипты ниразу не писал, все взято из других, так что прошу прощения, если тут сплошная абракадабра )
 
Как минимум, чтозанафиг три из четырех координат прямоугольника undefined? И на такое ошибка не выдается???
 
синтаксис нормальный, но в лучшем случае этот код выделит некие прямоугольники на первой странице документа. тут не ошибка, а просто отсутствие алгоритма, ничего не написано.

вообще не туда копаете по-моему, надо смотреть что там происходит при импорте, наверняка все решается проще и скорее всего без скриптов - стили настроить или mapping
 
Как минимум, чтозанафиг три из четырех координат прямоугольника undefined? И на такое ошибка не выдается???
Никаких ошибок не выдает. Правда, ничего и не исполняет. А "undefined" - это координаты, которые можно не учитывать - интересует только Х.
 
Как минимум, чтозанафиг три из четырех координат прямоугольника undefined? И на такое ошибка не выдается???
а где там прямоугольник? я вот вижу как переменной geometricBounds, нигде не используемой присваивается значение массива. с тем же успехом можно эту часть стереть - ничего не изменится
 
синтаксис нормальный, но в лучшем случае этот код выделит некие прямоугольники на первой странице документа. тут не ошибка, а просто отсутствие алгоритма, ничего не написано.
вообще не туда копаете по-моему, надо смотреть что там происходит при импорте, наверняка все решается проще и скорее всего без скриптов - стили настроить или mapping
Вполне тут реальна полная каша - никогда раньше не писал никаких скриптов и не программировал ничего. А просто со стилями здесь фокус не проходит - все зависит от того, сколько в абзаце попадается строчек. Если две или одна - тогда и происходят отлеты иконки.
 
Ну, топикстартер, вероятно, по неким подсознательным аналогиям решил, что код взятый в фигурные скобки каким то образом инициализирует выражение слева '))'
 
никогда раньше не писал никаких скриптов и не программировал ничего
Ну так может сперва мануалы покурить а потом код пытаться писать?
В качестве комплимента скажу, что код внешне очень похож на настоящий. '))'
 
Ну, топикстартер, вероятно, по неким подсознательным аналогиям решил, что код взятый в фигурные скобки каким то образом инициализирует выражение слева '))'
Тут мне даже возразить нечего :) Я в скриптах нулевой. Думал можно взять сходу такую задачку.
Спасибо ответившим. Думаю можно закрывать тему. Попробую поизучать матчасть.
 
Думал можно взять сходу такую задачку.
На самом деле задачка действительно простенькая - нужно всего навсего перебирать все растровые объекты на странице и проверять их (правильно!) geometricBounds.
Но для этого какие то базовые навыки языка надо иметь, а у вас они совсем нулевые.
 
На самом деле задачка действительно простенькая - нужно всего навсего перебирать все растровые объекты на странице и проверять их (правильно!) geometricBounds.
Но для этого какие то базовые навыки языка надо иметь, а у вас они совсем нулевые.
В яблочко.
 
все зависит от того, сколько в абзаце попадается строчек. Если две или одна - тогда и происходят отлеты иконки.
Это достаточное условие для решения задачи. Осталось выяснить, что с этими найденными объектами делать после того, как они будут найдены.
 
Попробую еще показать скрином, о чем шла речь. Одно и двухстрочные абзацы сдвигают иконки. Обычно я выискиваю их вручную и уползшему абзацу добавляю отступ сверху - это решает проблему. (Отступы разные для 1 и 2-х строчных вариантов).

Screen shot 2015-11-09 at 2.51.46 PM.png
 
Последнее редактирование:
Код:
app.scriptPreferences.measurementUnit = MeasurementUnits.POINTS;
var doc = app.activeDocument;
var sel = doc.selection[0].parentStory.paragraphs;
for (i=0; i<sel.length; i++){
    if ((sel[i].characters[0].pageItems.length>0) && (sel[i].lines.length < 3)){
        if (sel[i].leading == Leading.AUTO){var sAfter = sel[i].pointSize*sel[i].autoLeading/100;}
        else{var sAfter = sel[i].leading;}
        sel[i].spaceAfter += sAfter*(3-sel[i].lines.length);
        }
    }
Работает со story, в котором стоит курсор. Увеличивает "отступ после" в коротких абзацах. Пробуйте.
 
Последнее редактирование:
  • Спасибо
Реакции: vlmr
Код:
app.scriptPreferences.measurementUnit = MeasurementUnits.POINTS;
var doc = app.activeDocument;
var sel = doc.selection[0].parentStory.paragraphs;
for (i=0; i<sel.length; i++){
    if (sel[i].lines.length < 3){
        if (sel[i].leading == Leading.AUTO){var sAfter = sel[i].pointSize*sel[i].autoLeading/100;}
        else{var sAfter = sel[i].leading;}
        sel[i].spaceAfter += sAfter*(3-sel[i].lines.length);
        }
    }
Работает со story, в котором стоит курсор. Увеличивает "отступ после" в коротких абзацах. Пробуйте.
Спасибо большое за ответ. Работает. Увеличивает отступ на ура. Единственное - увеличивает отступы и там, где нет иконок - в коротких текстовых абзацах и заголовках. Просто верстка слишком разноплановая - там еще куча всего, включая таблицы - поэтому я пытался просто отыскивать отлетевшие иконки, лишь бы их не пропустить и подправлять отступы.
В CS4 не работает, попробовал в CS6 - там скрипт отработал.
 
увеличивает отступы и там, где нет иконок
Поправил. Возьмите оттуда же. (Я правильно понял, что иконки вставлены в начале абзаца, первым символом?)
В CS4 не работает, попробовал в CS6 - там скрипт отработал.
Первая строка работает, начиная с CS5. Если надо работать в CS4 — выбросьте её и измените в документе единицы измерения на пункты вручную.
 
  • Спасибо
Реакции: vlmr
Поправил. Возьмите оттуда же. (Я правильно понял, что иконки вставлены в начале абзаца, первым символом?)
Иконки в виде inline графики - таки первым символом )
Работает уже и в CS4 просто впечатляюще! У меня, возможно последний вопрос. Скрипт добавляет к 1 строчным абзацам отступ снизу примерно 22 пт, а к 2-х строчным 12 пт. Подскажите пожалуйста, что поправить в скрипте, чтобы эти отступы стали 12 и 8 пт соответственно. И огромное спасибо за Ваше участие.
 
Иконки в виде inline графики - таки первым символом )
Работает уже и в CS4 просто впечатляюще! У меня, возможно последний вопрос. Скрипт добавляет к 1 строчным абзацам отступ снизу примерно 22 пт, а к 2-х строчным 12 пт. Подскажите пожалуйста, что поправить в скрипте, чтобы эти отступы стали 12 и 8 пт соответственно. И огромное спасибо за Ваше участие.
А - все. Сам нашел таки :) Нашел в скрипте деление на 100 и заменил на деление на 200 - все шикарно. Огромное спасибо.
 
Самое простое, что приходит в голову, не вникая в скрипт - домножить нижнюю строку на коэффициент:
Код:
sel[i].spaceAfter += sAfter*(3-sel[i].lines.length)*12/22;
 
  • Спасибо
Реакции: vlmr
Статус
Закрыто для дальнейших ответов.