[ID CC-CC2022] Обратиться к graphics через itemByName

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

zx230

Участник
Топикстартер
Сообщения
69
Реакции
0
Нужно поменять изображение. Так как их много на странице, я назвал его нужным именем. (в слоях).
Но почему то не получается обратиться через itemByName,
или не правильно пишу синтаксис. Или может как то по другом можно?
 
ну к примеру так

app.activeDocument.allPageItems.itemByName('OC');

или так

app.activeDocument.pages[0].allGraphics.itemByName('OC');

не работает ни как
 
Возможно, дело в этом
 
к textFrames работает. но нужно обратиться к изображению. вот в чем суть
 
А вы точно уверены, что нужный вам объект правильно называется? Так пробовали?
 
allPageItems и allGraphics — массивы, а itemByName применимо к коллекциям объектов.
Попробуйте обратиться к rectangles.itemByName, скорее всего имя задано именно ему.
 
  • Спасибо
Реакции: _MBK_ и Skvoznyak
вообщем так работает allGraphics[0].itemLink.relink(File(newName));
а по имени не работает.
textFrames ищется но как к нему прикрутить itemLink.relink не понятно...
 
Код:
var pi = app.activeDocument.pageItems.itemByName(itemName);
pi.graphics[0].itemLink.relink(File(newName));
 
allGraphics
Array of Graphic
readonly
Lists all graphics contained by the TextFrame.

пишет readonly
 
у allGraphics нет метода itemByName, вам же написали уже.
 
allGraphics
Array of Graphic
readonly
Lists all graphics contained by the TextFrame.

пишет readonly
Тут же черными буквами английскими написано, что allGraphics — это массив. Page.graphics — это коллекция.
Это два разных типа объектов, с разными методами и свойствами. Вы узбека чардаш заставляете плясать.
 
где вы нашли свойство graphics ? у каких элементов.
я нашел только allGraphics

вот эта строчка у меня не работает
pi.graphics[0].itemLink.relink(File(newName));
 
У меня кстати тоже ошибку выдает, пишет:
Отсутствует обязательный параметр "To" метода "Relink".
Код:
app = win32com.client.dynamic.Dispatch('Indesign.Application.CS5.5')
doc = app.ActiveDocument
pi = doc.pageItems
my_name = pi[0].allGraphics[0].itemLink.filePath # C:\Logo_1.jpg
my_new_name = my_name.replace('_1','_2') # C:\Logo_2.jpg
pi[0].allGraphics[0].itemLink.relink(my_new_name)

вот что написано в документации:
void relink (to: varies)
Points the link to a new source file.
The full path name of the new source file. Can accept: File or String.
 
У меня кстати тоже ошибку выдает, пишет:
Отсутствует обязательный параметр "To" метода "Relink".
Это вообще из другой оперы ошибка
Вам же ясно в документации сказано:
Points the link to a new source file.
The full path name of the new source file. Can accept: File or String.
Поставьте
pi[0].allGraphics[0].itemLink.relink(File(my_new_name))
хотя, возможно, просто путь неправильно формируется
 
Поставьте
pi[0].allGraphics[0].itemLink.relink(File(my_new_name))
Так тоже не работает )
и так: pi[0].allGraphics[0].itemLink.relink(File(open(my_new_name)))
и если путь по-другому записать тоже не работает: my_new_name.replace('\\','/')

Есть вариант удалить ( или перенести в другую папку) старый файл и переименовать на его имя новый, а потом сделать pi[0].allGraphics[0].itemLink.update
 
Проверьте для начала File

a=File(path);
a.exists

что выдает? Скорее всего путь неправильно задаете
 
Так точно не надо
Вам Сквозняк правильно говорит - сперва проверьте есть ли файл или нет, сразу поймете правильно ли маршрут написан
И вообще в данной теме это оффтоп
 
короче, работает вот так: :)
pi.allGraphics[0].itemLink.relink(newFile);
(обращение к массиву графики которая лежит в textFrame)
просто свойства Graphics нет.

ps но появилась другая проблема..
так как у меня вызов идет во всплываемом окне- -пишет ошибку, типо у вас открыто окно и замена не сработает.
если вызывать без окна, то все работает.
 
Статус
Закрыто для дальнейших ответов.