1

我需要用给定文件替换 InDesign 文档中的一些图像。使用 InDesign 服务器会发生这种情况,但脚本编写与常规 InDesign 几乎相同,只是无法进行用户交互。

我拥有的是一个 InDesign 文档,包含一些图像的 Rectangle 的 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 脚本非常陌生,所以我在这里迷路了。我正在阅读文档其他资源,但我很困惑。例如,为什么doc.textFrames.itemByID其他框架没有类似的东西?我是否必须迭代doc.allPageItems和比较 id?

4

2 回答 2

2

约瑟夫,

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);
    }
}
于 2015-08-13T16:14:25.110 回答
2

itemByID是一种可供所有人使用的方法,pageItems并且textFramesrectanglespageItem 的子类。所以你可以从两者中访问这个方法,它会给出相同的结果。您应该也可以使用doc.rectangles.itemByID。见: http: //www.indesignjs.de/extendscriptAPI/indesign11/#Rectangles.html#d1e201999__d1e202138

但是你说得对,描述有点混乱,它说:

返回具有指定 ID 的 TextFrame。

显然不是这样。如果您已经有了要定位的 ID,则可以使用,这可能不太容易混淆,因为基本上您在使用 itemByID 时doc.pageItems.itemByID正在寻找。pageItems

至于fitting options,它们是矩形对象的属性,因此放置新图像不应更改拟合选项。如果您想保持不变,只需删除对fit(). 请参阅的属性列表RectangleframeFittingOptions: http: //www.indesignjs.de/extendscriptAPI/indesign11/#Rectangle.html

于 2015-08-12T02:51:40.170 回答