【发布时间】:2021-04-18 00:53:55
【问题描述】:
我正在尝试为 InDesign 创建一个脚本,强制所有图形框架(矩形)适应内容。我将它与 XML 导入一起使用,并且一些图形(尤其是表格中的图形)的帧小于图形。我们不希望图形被裁剪,也不希望它们被缩放到更小的尺寸,所以我们想运行一个脚本来查找所有图形对象,然后强制框架适应图形。我发现以下字符串 应该 工作,但我无法让它为我工作。
app.activeDocument.rectangles.everyItem().fit(FitOptions.FRAME_TO_CONTENT);
我用这段代码创建了一个非常简单的函数,但它实际上并没有做任何事情。我确定我遗漏了一些明显的东西,但是我的 JavaScript 经验非常有限。这是我的简单功能:
function fitToFrame(){
app.activeDocument.rectangles.everyItem().fit(FitOptions.FRAME_TO_CONTENT);
}
我也尝试将其视为一个数组,但这也无济于事。
function fitToFrame(){
var doc=app.activeDocument;
app.findObjectPreferences = null;
var obj = new Array(doc.rectangles.everyItem());
for (var i=0; i<obj.length; i++){
obj[i].fit(FitOptions.FRAME_TO_CONTENT);
}
}
我尝试了一种不同的方法来查找和识别对象,但这仍然不起作用,我被卡住了。
function fitToFrame(){
var doc=app.activeDocument;
app.findObjectPreferences = null;
var obj = doc.findObject();
for (var i=0; i<obj.length; i++){
if (obj[i] instanceof Rectangle){
obj[i].fit(FitOptions.FRAME_TO_CONTENT);
}
}
}
我错过了什么?我很感激任何建议!
更新 我确实发现,当我运行上面列出的最后一个函数时,发生了一些事情,因为它将我在 UI 中的撤消菜单更改为“撤消设置框架拟合选项”,但文档中实际上没有任何变化,所以我还是卡住了。
【问题讨论】:
-
我发现对everyItem() 应用某些东西经常不起作用。尝试遍历集合并一次应用一个。 fit 方法确实适用于矩形。还要确保在放置图形后应用它
-
@NicolaiKant 这就是我在上述函数的最后两个版本中尝试做的事情,但它们也没有做任何事情。如果everyItem() 是粗略的,那么我的最后一个函数应该 可以工作,但它什么也没做。我已经测试了这个循环,我知道它正在识别 Rectangle 对象,所以 obj[1] 应该被识别为一个矩形并与 fit() 一起使用,但它没有做任何事情。顺便说一句,我使用相同循环的副本将特定样式应用于图形,它可以正常工作,所以我觉得我在这里做错了。
-
我之前遇到过 fit 方法的问题,请记住,我也没有成功地让它在我的脚本中工作。我最终通过几何边界属性调整了框的大小(即让我的脚本计算每个框所需的大小,然后将几何边界拟合到该大小)。
-
@mdomino 这听起来是个好主意,但我没有足够的经验知道如何做到这一点。我尝试使用 resolve 来获取左上角和右下角的锚点,然后使用 reframe(基于我在脚本 API 文档中找到的重构示例),但它似乎没有做任何事情。谢谢你的建议,我会继续玩的。
标签: javascript adobe-indesign extendscript