Как выбрать одно конкретное изображение на текущем слайде в текущем документе Keynote?

Используя AppleScript, я хочу изменить положение x и y определенного изображения на каждом слайде документа Keynote. После запуска и активации Keynote работает следующий код...

tell the front document
   set the current slide to slide 1
   tell the current slide
      set thisImage to image 1
      set position of thisImage to {10,10}
   end tell -- current slide
end tell -- front document

... но он слишком хрупкий. Если мое изображение не будет первым («изображение 1»), то я буду менять положение неправильного объекта. Я не могу найти ничего в словарях сценариев или в онлайн-примерах о выражении спецификатора объекта для определенного изображения. Я пробовал несколько вариантов таких вещей, как...

set thisImage to image with file name "my-file.png"

... но безрезультатно. Любые советы приветствуются. Спасибо!


person Alan    schedule 25.02.2020    source источник


Ответы (2)


Это работает в Keynote 8.2, но, честно говоря, я не знаю, почему.

set thisImage to image {name:"my-file.png"}

Однако, если вы хотите узнать это изображение, каково его имя, вы должны запросить его имя файла, например…

file name of thisImage

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

У вас есть некоторая избыточность (вокруг «текущего слайда»), так что вот мое мнение:

tell slide 1 of the front document
    set thisImage to image {name:"my-file.png"}
    set position of thisImage to {10, 10}
end tell

Наконец, поскольку ваша цель состоит в том, чтобы просмотреть все слайды в колоде, вы можете попробовать следующее:

tell front document
    repeat with i from 1 to count of slides

        tell slide i to set position of image {name:"my-file.png"} to {10, 10}

    end repeat
end tell
person Mockman    schedule 01.03.2020
comment
Ваше решение работает и в Keynote 9.2. Спасибо. - person Alan; 02.03.2020

При дальнейшем рассмотрении предыдущий ответ не работает или больше не работает. Видимо спецификатор имени...

set thisImage to image {name:"my-file.png"}

... на самом деле не указывает имя таким образом. Вот мой уродливый обходной путь:

tell the current slide
    set imageCount to the count of images
    repeat with i from 1 to imageCount
        set thisImage to image i
        if file name of thisImage = "myTargetFile.png" then
            set position of thisImage to {10, 10}
            exit repeat -- Ugly programming, look away.
        end if
    end repeat
end tell
person Alan    schedule 20.08.2020