You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Illustrator中通过JavaScript添加上标2文本?

处理Illustrator文本恢复与上标添加的脚本优化

嘿,看你这段Illustrator脚本是在做文本的动态替换和恢复,还要给恢复后的文本加上上标²对吧?我来帮你拆解下这段代码的逻辑,再分享几个能让脚本更健壮的优化点。

首先,先把你提供的核心代码片段整理出来,方便大家查看:

if (textGroupItem.textRange.characterAttributes.textFont.toString().toLowerCase().match(regPattern)){ 
    textGroupItem.textRange.characters.removeAll() 
    textGroupItem.textRange.characters.add(un + " - " + sm + "m" + "²") 
}

代码逻辑拆解

这段代码的核心思路很清晰:

  • 先检查目标文本组的字体是否匹配你定义的regPattern正则规则
  • 如果匹配上了,就清空当前文本范围里的所有内容
  • 最后重新拼接并添加你需要恢复的文本,末尾带上标²的Unicode字符

几个实用的优化建议

  1. 更规范的上标实现方式
    直接用"²"这个Unicode字符虽然简单,但如果需要严格的上标格式(比如跟随原文本字体大小动态调整),不如通过设置文本属性来实现,效果会更专业:
// 先添加基础文本内容
var baseText = textGroupItem.textRange.characters.add(un + " - " + sm + "m");
// 单独添加"2"作为上标
var superscriptChar = textGroupItem.textRange.characters.add("2");
// 设置上标大小为原文本的70%
superscriptChar.characterAttributes.size = baseText.characterAttributes.size * 0.7;
// 设置基线偏移,让"2"变成上标
superscriptChar.characterAttributes.baselineShift = baseText.characterAttributes.size * 0.3;

这种方式的好处是,不管原文本用多大的字号,上标都会自动适配,不会出现大小不协调的情况。

  1. 正则匹配的健壮性优化
    记得要提前定义好合法的regPattern正则表达式,比如你要匹配包含"Helvetica"的字体,可以这么写:
var regPattern = /helvetica/i; // 加i表示不区分大小写匹配

避免因为正则未定义或者格式错误导致脚本直接报错。

  1. 文本范围的精准定位
    textGroupItem.textRange会选中整个文本组的内容,但如果你的文本组里有多个文本框,最好遍历每个文本框单独处理,避免误操作:
// 遍历文本组里的每个子元素
for (var i = 0; i < textGroupItem.pageItems.length; i++) {
    var pageItem = textGroupItem.pageItems[i];
    // 只处理文本框类型的元素
    if (pageItem.typename === "TextFrame") {
        var textRange = pageItem.textRange;
        // 在这里执行你的字体检查和文本替换逻辑
    }
}

整合后的完整示例脚本

把这些优化点整合起来,一个更靠谱的脚本示例如下:

// 定义要匹配的字体正则(替换成你需要的字体关键词)
var regPattern = /your-target-font/i;
// 假设un和sm是你已经定义好的变量
var un = "15";
var sm = "8";

// 处理当前选中的元素
var selectedItems = app.activeDocument.selection;
for (var i = 0; i < selectedItems.length; i++) {
    var item = selectedItems[i];
    // 只处理文本组
    if (item.typename === "GroupItem") {
        // 遍历组内的每个文本框
        for (var j = 0; j < item.pageItems.length; j++) {
            var textFrame = item.pageItems[j];
            if (textFrame.typename === "TextFrame") {
                var textRange = textFrame.textRange;
                var fontName = textRange.characterAttributes.textFont.toString().toLowerCase();
                // 检查字体是否匹配
                if (fontName.match(regPattern)) {
                    // 清空原有文本
                    textRange.characters.removeAll();
                    // 添加基础文本
                    var baseText = textRange.characters.add(un + " - " + sm + "m");
                    // 添加并设置上标
                    var superscriptChar = textRange.characters.add("2");
                    superscriptChar.characterAttributes.size = baseText.characterAttributes.size * 0.7;
                    superscriptChar.characterAttributes.baselineShift = baseText.characterAttributes.size * 0.3;
                }
            }
        }
    }
}

这样调整后,脚本不仅能完成你需要的文本恢复和上标添加,还能适配更复杂的文本组结构,上标格式也更规范。

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

火山引擎 最新活动