我需要用给定文件替换InDesign文档中的一些图像。使用InDesign服务器会发生这种情况,但脚本与常规InDesign几乎相同,但不能进行用户交互。
我所拥有的是InDesign文档,包含一些图像的矩形的ID以及应该替换图像的新图像的路径。
应替换图像,但FitOptions等设置应保持不变。此外,新文件应嵌入InDesign文档中。已经有一些代码可以运行了:
function changeImages(doc) {
var arrayLength = changeImage.length;
for (var i = 0; i < arrayLength; i++) {
var fr = doc.textFrames.itemByID(1 * changeImage[i].id);
if (!fr)
continue;
var file = File(imagePath + changeImage[i].file);
fr.place(file);
fr.fit (FitOptions.CONTENT_TO_FRAME);
fr.fit (FitOptions.PROPORTIONALLY);
fr.fit (FitOptions.CENTER_CONTENT);
}
}
这似乎不对。当对象是矩形时,为什么使用doc.textFrames
?我实际上很困惑甚至可以工作。
它也只是设置了一些FitOptions,但我想保留现有的。
我是InDesign脚本的新手,所以我迷失在这里。我正在阅读docs和other resources,但我很困惑。例如为什么doc.textFrames.itemByID
但是其他框架没有这样的东西?我是否必须迭代doc.allPageItems
并比较ID?
答案 0 :(得分:2)
itemByID
是一种适用于所有pageItems
的方法,textFrames
和rectangles
都是pageItem的子类。因此,您可以从两者中访问此方法,并且它会给出相同的结果。您也应该能够使用doc.rectangles.itemByID
。请参阅:http://www.indesignjs.de/extendscriptAPI/indesign11/#Rectangles.html#d1e201999__d1e202138
但你说得对,描述有点令人困惑,它说:
返回具有指定ID的TextFrame。
显然不是这样。如果您已经拥有要定位的ID,则可以使用doc.pageItems.itemByID
,这可能不那么令人困惑,因为在使用itemByID时基本上您正在寻找pageItems
。
对于fitting options
,它们是矩形对象的属性,因此放置新图像不应该更改拟合选项。如果您想保持不变,只需删除对fit()
的调用即可。请参阅Rectangle
,frameFittingOptions
:http://www.indesignjs.de/extendscriptAPI/indesign11/#Rectangle.html
答案 1 :(得分:1)
约瑟夫,
我在使用InDesign CS4时遇到了与原始FitOptions相同的问题。我无法弄清楚如何获取当前在InDesign CS4中使用的设置。
要解决此问题,我所做的是在InDesign文档的框架适合选项中设置在空框架中拟合中的值。
然后在代码中我使用了这个设置,如下所示:
changeImages (app.activeDocument);
function changeImages(doc)
{
with(doc)
{
var rec = doc.rectangles.itemByID(207);
var file = new File("c:\\new_image.png");
rec.place(file);
rec.fit(rec.frameFittingOptions.fittingOnEmptyFrame);
}
}