You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Adobe Illustrator 选择同等宽高对象的脚本失效求修复方案

Adobe Illustrator 同尺寸对象选择脚本修复说明

原代码核心问题

  • selectionArray 初始化错误:原代码将其定义为数字类型0,无法存储筛选出的页面对象,需修改为数组类型[]
  • 遍历范围缺失:docRef.pageItems仅能获取页面顶层未嵌套的对象,无法识别组、复合路径、子图层内的元素
  • 尺寸匹配逻辑缺陷:Illustrator计算宽高时易产生浮点精度误差,直接使用==判断会遗漏实际尺寸一致的对象,需增加精度容差
  • 无最终选中逻辑:筛选完成后未将匹配的对象数组赋值给app.selection,不会触发界面的选中效果
  • 缺少前置校验:未判断当前是否有打开的文档、是否已选中参考对象,空选运行会直接报错

修复后完整代码

// 前置校验:避免空运行报错
if (app.documents.length < 1 || app.selection.length < 1) {
    alert("请先打开文档并选中1个参考对象");
    exit();
}

var docRef = app.activeDocument;
var refItem = app.selection[0];
var objWidth = refItem.width;
var objHeight = refItem.height;
var selectionArray = [];
// 尺寸匹配精度容差,单位为pt,可根据需求调整
var tolerance = 0.001;

// 递归遍历所有层级的页面对象
function traverseItems(container) {
    for (var i = 0; i < container.pageItems.length; i++) {
        var currentItem = container.pageItems[i];
        // 匹配宽高
        if (Math.abs(currentItem.width - objWidth) < tolerance && Math.abs(currentItem.height - objHeight) < tolerance) {
            selectionArray.push(currentItem);
        }
        // 递归遍历容器内的嵌套对象
        if (["GroupItem", "CompoundPathItem", "Layer"].indexOf(currentItem.typename) > -1) {
            traverseItems(currentItem);
        }
    }
}

traverseItems(docRef);
// 执行选中操作
app.selection = selectionArray;

可选优化

如果需要将宽高互换的对象也判定为尺寸匹配(例如适配旋转、翻转后的对象),可以将尺寸匹配的判断条件替换为以下内容:

if (
    (Math.abs(currentItem.width - objWidth) < tolerance && Math.abs(currentItem.height - objHeight) < tolerance) ||
    (Math.abs(currentItem.width - objHeight) < tolerance && Math.abs(currentItem.height - objWidth) < tolerance)
)

内容的提问来源于stack exchange,提问作者H Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 23:18:02