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

JSX脚本批量缩放SVG时Adobe Illustrator崩溃及磁盘占用异常求助

排查Adobe Illustrator批量SVG缩放脚本崩溃与磁盘占用问题

问题概述

使用JSX脚本批量缩放SVG文件时,出现以下异常:

  • Illustrator频繁崩溃
  • 磁盘占用剧增但无法定位具体占用位置
  • 脚本仅能处理第一个文件,弹出缩放因子提示后停止运行

原始脚本

var ziel44 = 124.72; // 单位:pt
var ziel88 = 249.45; // 单位:pt
var speicherPfad = "C:/Users/daso/Source/"
var folderPrefix = "C:/Users/daso/Target/"
var inputFolder = Folder.selectDialog(speicherPfad);

var files = inputFolder.getFiles("*.svg");

for (var i = 0; i < files.length; i++) {
    var file = new File(files[i]);
    try {
        var doc = app.open(file);

        doc.selection = null;
        doc.selection = doc.pageItems;
        app.executeMenuCommand('group'); // 将选中对象分组
        var group =  doc.selection[0];
        var artboard = doc.artboards[0];
        var rect = artboard.artboardRect; // 格式:[y1, x1, y2, x2]
        var width = Math.abs(rect[2] - rect[0]);
        var height = Math.abs(rect[1] - rect[3]);
        var scaleFactor = 1;
        if (height > width) {
            if (height < 40) {
                if (group.height > 0) {
                    scaleFactor = (ziel44 / group.height) * 100;
                }
            } else {
                if (group.height > 0) {
                    scaleFactor = (ziel88 / group.height) * 100;
                }
            }
        } else {
            if (width < 40) {
                if (group.width > 0) {
                    scaleFactor = (ziel44 / group.width) * 100;
                }
            } else {
                if (group.width > 0) {
                    scaleFactor = (ziel88 / group.width) * 100;
                }
            }
        }

        alert("Skalierungsfaktor: " + scaleFactor);
        group.resize(scaleFactor, scaleFactor);
        app.executeMenuCommand('ungroup'); 

        app.executeMenuCommand('fitArtboardToSelectedArt'); 

        var saveFile = new File(speicherPfad + "/" + file.name);
        var saveOptions = new IllustratorSaveOptions();
        saveOptions.compatibility = Compatibility.ILLUSTRATOR29; 
        saveOptions.flattenOutput = OutputFlattening.PRESERVEAPPEARANCE;

        doc.exportFile(saveFile, ExportType.SVG, new ExportOptionsSVG());
        doc.close(saveOptions.DONOTSAVECHANGES);
        $.sleep(1000);
    } catch (e) {
        alert("Fehler bei Datei: " + file.name + "\n" + e.message);
        if (doc && !doc.closed) {
            doc.close(SaveOptions.DONOTSAVECHANGES);
        }
    }
}

排查与修复思路

1. 解决脚本执行中断问题

  • 移除阻塞式弹窗:alert("Skalierungsfaktor: " + scaleFactor)会强制暂停脚本,必须手动关闭才能继续执行,这是脚本仅处理第一个文件的直接原因。替换为日志输出:
    $.writeln("文件" + file.name + "的缩放因子:" + scaleFactor);
    
    可通过Illustrator菜单「窗口 > 信息 > 脚本日志」查看输出内容。
  • 修正文档关闭参数错误:doc.close(saveOptions.DONOTSAVECHANGES)应为doc.close(SaveOptions.DONOTSAVECHANGES),SaveOptions是全局枚举,不能通过saveOptions对象调用。

2. 解决Illustrator崩溃问题

  • 替换不稳定的菜单命令:app.executeMenuCommand依赖UI状态,易引发崩溃,改用原生API替代:
    • 分组操作:var group = doc.groupItems.add(); doc.pageItems.everyItem().moveToEnd(group);
    • 取消分组:group.ungroup();
    • 适配画板:artboard.fitToSelectedArt();
  • 禁用UI交互与刷新:脚本执行前添加以下代码,减少UI渲染开销:
    var originalInteraction = app.userInteractionLevel;
    app.userInteractionLevel = UserInteractionLevel.DONTDISPLAYALERTS;
    
    脚本结束后恢复原设置:
    app.userInteractionLevel = originalInteraction;
    

3. 解决磁盘占用异常问题

  • 分离输入输出路径:当前脚本将导出文件覆盖到原目录,易产生冗余缓存。改用folderPrefix作为输出目录:
    var saveFile = new File(folderPrefix + "/" + file.name);
    
  • 清理临时文件:Illustrator临时文件默认存储在C:\Users\<用户名>\AppData\Local\Temp,脚本运行中若未正确关闭文档,临时文件可能无法自动删除。可手动清理该目录,或在脚本异常分支中强制关闭所有未关闭文档。
  • 优化SVG导出选项:配置导出参数减少文件大小与冗余数据:
    var svgOptions = new ExportOptionsSVG();
    svgOptions.embedRasterImages = true;
    svgOptions.outputFormat = SVGOutputFormat.SVG_TINY;
    svgOptions.preserveEditability = false;
    doc.exportFile(saveFile, ExportType.SVG, svgOptions);
    

4. 增强稳定性与调试能力

  • 优化异常捕获:在catch块中添加详细日志,方便定位出错文件:
    catch (e) {
        $.writeln("处理文件" + file.name + "出错:" + e.message + "\n堆栈信息:" + e.stack);
        if (doc && !doc.closed) {
            doc.close(SaveOptions.DONOTSAVECHANGES);
        }
    }
    
  • 检查文件兼容性:部分SVG可能包含Illustrator不支持的元素(如复杂滤镜、自定义字体),可先手动测试单个文件,排查是否存在损坏或不兼容的SVG。
  • 调整延迟时间:$.sleep(1000)可根据系统性能适当缩短(如500ms),但需确保Illustrator完成当前文件的导出与关闭操作。

内容的提问来源于stack exchange,提问作者Daniel Sommerfeld

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:57:38