如何以编程方式将内嵌图形添加到InDesign中的表格单元格中

时间:2014-12-06 14:18:33

标签: adobe-indesign

我在InDesign文档中有一个表。我将在第一个单元格中添加内嵌图像。

var myPics = File("/c/test.png"),
myDoc = app.activeDocument,
myPage = myDoc.pages[0],
myTable = myDoc.stories.everyItem().tables[0],
myCell = myTable.cells[0];

myCell.contents = myPics;

我希望应该有一个图像放入单元格,但文件地址会被填充。我该怎么办?

1 个答案:

答案 0 :(得分:2)

InDesign中的contents文本对象与实际格式化的本机InDesign文本不完全等效;它们总是来自简单的Javascript文本字符串。阅读contents会丢弃所有InDesign的文本属性(例如,文本格式,超链接,书签,XML标记以及所有元对象,如图像);写contents用纯文本填充目的地,用放置文本的位置的文本容器的默认格式进行格式化。

您无法在"中存储PNG文件"一个Javascript变量;不是作为File对象(它不会被解析为实际文件' 内容),而不是作为'图像' (内容将被视为文本字符串,而不是'意味着什么)。

正确的方法是使用place,它可以作为一个整体用于InDesign文档,在这种情况下,文件将直接导入' on'页面,或使用文本 location 通过有效属性,例如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()的警告:以这种方式使用时,它是直播集合。集合就像一个数组,除了集合中的每个元素都被看到了#39;作为唯一的对象。因此,您可以执行类似

的操作
myTable.cells.everyItem().contents = "hello!";

,由于everyItem()命令,文本将出现在每个单元格中。 ,因为您已经创建了的集合 - myDoc.stories.everyItem().tables[0]将是""当前文档故事的所有中的第一个表格 - 您会惊讶地发现,所有中的突然包含hello as好。

如果您将当前文本框的副本放在同一页面上并再次运行我的脚本版本,则可以看到此内容。你会发现它在两个表中都插入了相同的图像!

据推测,您只想在第一个故事的第一个故事的第一个表格中插入一次图像。那将是

myTable = myPage.stories[0].tables[0];