Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过脚本在InDesign中用给定文件替换图形?_Javascript_Adobe Indesign_Indesign Server - Fatal编程技术网

Javascript 如何通过脚本在InDesign中用给定文件替换图形?

Javascript 如何通过脚本在InDesign中用给定文件替换图形?,javascript,adobe-indesign,indesign-server,Javascript,Adobe Indesign,Indesign Server,我需要用给定的文件替换InDesign文档中的一些图像。这是使用InDesign服务器实现的,但脚本编写与常规InDesign几乎相同,只是不允许用户交互 我拥有的是一个InDesign文档,一个包含某个图像的矩形的ID,以及一个新图像的路径,该图像应该替换该图像 应更换图像,但FitOptions等设置应保持不变。此外,新文件应嵌入InDesign文件中。已经有一些代码可以工作: function changeImages(doc) { var arrayLength = change

我需要用给定的文件替换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){
var arrayLength=changeImage.length;
对于(变量i=0;i
这似乎不对。当对象是矩形时,为什么要使用
doc.textFrames
?我真的很困惑,这甚至是有效的

它只是设置了一些选项,但我想保留现有的


我对InDesign脚本非常陌生,所以我在这里迷路了。我正在读和,但我感到困惑。e、 g为什么有
doc.textFrames.itemByID
但其他框架没有类似的内容?我必须迭代
doc.allPageItems
并比较ID吗?

itemByID
是一种可用于所有
pageItems
的方法,
textFrames
矩形
都是pageItem的子类。因此,您可以从这两个方面访问此方法,并且它将给出相同的结果。您还应该能够使用
doc.rectangles.itemByID
。见:

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

返回具有指定ID的TextFrame

显然情况并非如此。如果您已经有了想要定位的ID,那么可以使用
doc.pageItems.itemByID
,这可能会比较容易混淆,因为在使用itemByID时基本上是在查找
pageItems


至于
拟合选项
,它们是矩形对象的属性,因此放置新图像不应更改拟合选项。如果要保持不变,只需删除对
fit()
的调用即可。请参见
矩形
的属性列表中,
框架安装选项

itemByID
是一种可用于所有
页面项
的方法,
文本框
矩形
都是页面项的子类。因此,您可以从这两个方面访问此方法,并且它将给出相同的结果。您还应该能够使用
doc.rectangles.itemByID
。见:

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

返回具有指定ID的TextFrame

显然情况并非如此。如果您已经有了想要定位的ID,那么可以使用
doc.pageItems.itemByID
,这可能会比较容易混淆,因为在使用itemByID时基本上是在查找
pageItems

至于
拟合选项
,它们是矩形对象的属性,因此放置新图像不应更改拟合选项。如果要保持不变,只需删除对
fit()
的调用即可。请参见
矩形
框架安装选项的属性列表:

Josef

在InDesign CS4中,我也遇到过同样的问题,即保留原始选项。我一直无法弄清楚如何获得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);
    }
}
约瑟夫

在InDesign CS4中,我也遇到过同样的问题,即保留原始选项。我一直无法弄清楚如何获得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);
    }
}

如何找到要更改的图像的ID?或者我们如何定义它?如何找到要更改的图像的ID?或者我们如何定义它?