Текстовые объекты contents
в InDesign не являются точными эквивалентами фактического отформатированного исходного текста InDesign; они всегда отбрасываются в простые текстовые строки Javascript и из них. Чтение contents
отбрасывает все текстовые атрибуты InDesign (например, форматирование текста, гиперссылки, закладки, XML-маркеры и все метаобъекты, такие как изображения); и запись contents
заполняет пункт назначения простым текстом, отформатированным по умолчанию форматирования текстового контейнера в месте размещения текста.
Вы не можете сохранить PNG-файл «в» переменной Javascript; а не как объект File (он не будет разбираться в содержимом фактического файла), а не как «изображение» (содержимое будет рассматриваться как текстовая строка, а не «что-то»).
Правильный способ заключается в использовании place
, который может работать на InDesign документа в целом, в этом случае файл будет импортирован непосредственно «на» странице, или с помощью текстового расположения с помощью апробированной собственности такой как его insertionPoints
:
var myPics = File("/c/test.png"),
myDoc = app.activeDocument,
myPage = myDoc.pages[0],
myTable = myDoc.stories.everyItem().tables[0],
myCell = myTable.cells[0];
myCell.insertionPoints[0].place(myPics);
Если вы хотите убедиться, что содержимое myCell
пуст перед установкой, вы можете добавить
if (myCell.texts[0].length > 0)
myCell.texts[0].remove();
Предупреждение о вашем использовании everyItem()
: при использовании таким образом, это живая коллекция. Коллекция действует как массив, за исключением того, что каждый элемент коллекции «рассматривается» как единственный объект. Таким образом, вы можете сделать что-то вроде
myTable.cells.everyItem().contents = "hello!";
и текст будет отображаться в каждой отдельной клетке, из команды everyItem()
. Но, так как вы уже создали коллекцию таблиц - myDoc.stories.everyItem().tables[0]
будет список «» первой таблицы в все историй текущего документа - вы найдете, к своему удивлению, что все из они внезапно будут содержать hello
.
Вы можете увидеть это, если вы поместите копию текущего текстового фрейма на ту же страницу и снова запустите мою версию своего сценария. Вы увидите, что оно вставляет одно и то же изображение в обе таблицы!
Предположительно, вы хотите вставить изображение только один раз, в первую таблицу, в первый рассказ, на первой странице. Тогда будет
myTable = myPage.stories[0].tables[0];