【问题标题】:How to replace a graphic with given file in InDesign via script?如何通过脚本在 InDesign 中用给定文件替换图形?
【发布时间】:2015-08-14 00:14:25
【问题描述】:

我需要用给定文件替换 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 脚本非常陌生,所以我在这里迷路了。我正在阅读docsother resources,但我很困惑。例如,为什么有 doc.textFrames.itemByID 而其他框架却没有这样的东西?我是否必须迭代 doc.allPageItems 并比较 id?

【问题讨论】:

    标签: javascript adobe-indesign indesign-server


    【解决方案1】:

    itemByID 是一个适用于所有pageItems 的方法,textFramesrectangles 都是 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() 的调用。见RectangleframeFittingOptions的属性列表:http://www.indesignjs.de/extendscriptAPI/indesign11/#Rectangle.html

    【讨论】:

    • 如何找到要更改的图像的ID?或者我们如何定义它?
    【解决方案2】:

    约瑟夫,

    在保留原始 FitOptions 方面,我在使用 InDesign CS4 时遇到了同样的问题。我一直不知道如何获得当前在 InDesign CS4 中使用的设置。

    为了解决这个问题,我所做的是在 InDesign 文档的 Frame Fitting Options 中的 Fitting on Empty Frame 中设置值。

    然后在代码中我使用了该设置,如下所示:

    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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 2019-01-09
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多