Applescript для назначения тега XML всем изображениям в документе InDesign - PullRequest
0 голосов
/ 02 октября 2018

У меня странная проблема.Мой короткий яблочный сценарий отчасти работает.Я хочу пометить все прямоугольники (это то, что библиотека Adobe называет фреймами изображений) с помощью XML-тега «Изображение».

set tagName to "Image"
set imageList to {}

tell application "Adobe InDesign CC 2018"
tell active document

    set x to make XML element of first XML element with properties {markup tag:tagName}

    set imageList to every rectangle //there are 4 rectangles
    repeat with i from 1 to number of items in imageList
        tell item i of imageList to markup using x

    end repeat

end tell

end tell

В журнале показано, что он размечает каждый прямоугольник.Но когда я проверяю документ, только последний прямоугольник в imageList фактически показывает, что тег XML применен.

Кроме того, я могу отменить или остановить скрипт, и последнее изображение перед отменой получит тег.(То есть, если я отменяю обработку прямоугольника 2, прямоугольник 2 получает изображение, а прямоугольники 1, 3 и 4 - нет.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Благодаря предложению Марка Энтони на MacScripter.net.Это работает для моих нужд.Все документы, которые я обрабатываю, содержат только изображения (без другой графики, рамок и т. Д.)

set tagName to "Image"
set imageList to {}

tell application "Adobe InDesign CC 2018"
tell active document

    set x to make XML element of first XML element with properties {markup tag:tagName}

    set imageList to every rectangle
    repeat with rect in imageList
        make XML element at XML element 1 with properties {markup tag:"Image", 
XML content:rect}
    end repeat

end tell

end tell
0 голосов
/ 04 октября 2018

Ваш текущий критерий:

Во-первых, критерий, который вы используете в настоящее время для вывода изображения , подвержен ошибкам.Элемент страницы, для которого type равен rectangle, не обязательно равен image .Например;изображение может быть помещено в круг, в этом случае его type будет oval (не rectangle).

Следующая строка кода в вашем вопросе, которая гласит::

set imageList to every rectangle

также будет включать любые элементы страницы, которые были созданы с помощью Rectangle Frame Tool - который во многих .indd файлах не будет изображением.


Рекомендуемый критерий:

Чтобы вывести изображение, я рекомендую использовать all graphics вместо rectangles для получения списка изображений.Словарь Applescript в InDesign описывает graphic как:

graphic Импортированное графическое изображение в любом графическом формате файла (включая векторные и растровые форматы.)


Решение:

Следующая таблица AppleScript демонстрирует способ автоматизации процесса маркировки всех изображений с помощью тега XML с именем «Изображения» .Каждое результирующее теговое изображение будет добавлено как дочерний элемент XML корневого элемента XML документа.

set tagName to "Image"

tell application "Adobe InDesign CC 2018"
  tell active document
    if (count of page items) = 0 then return

    set locked of every layer to false
    set locked of every page item to false

    repeat with currentImage in all graphics
      if associated XML element of currentImage is not equal to nothing then
        untag associated XML element of currentImage
      end if
      make XML element at XML element 1 with properties {markup tag:tagName, XML content:currentImage}
    end repeat

  end tell
end tell

Объяснение

  1. set tagName to "Image"присваивает имя XML-элемента (т. е. «изображение») переменной tagName.

  2. Строка, которая гласит:

    if (count of page items) = 0 then return
    

    , гарантирует выход изранний сценарий, если документ не содержит элементов страницы.

  3. Строки, которые читаются:

    set locked of every layer to false
    set locked of every page item to false
    

    , гарантируют, что все слои документа и элементы страницы разблокированы.Если изображение было заблокировано, оно не может быть помечено.

  4. Строки:

    if associated XML element of currentImage is not equal to nothing then
      untag associated XML element of currentImage
    end if
    

    untags любой существующий тег, который может иметь изображениекак это может быть неверно.

  5. Строка чтения:

    make XML element at XML element 1 with properties {markup tag:tagName, XML content:currentImage}
    

    выполняет фактическую пометку изображения.

...