Adobe Illustrator脚本:实现文本框内文本居中且最大化无换行
Adobe Illustrator脚本:实现文本无换行居中并最大化字号
核心问题分析
原方案使用区域文本(areaText)会触发Illustrator默认的自动换行逻辑,这是文本换行的根本原因;同时溢出框的检测逻辑存在语法错误,且未设置强制单行对齐属性,最终引发缩放不均、换行等问题。
解决思路
- 改用点文本(
pointText):从根源避免自动换行,点文本默认保持单行显示,仅需控制其宽度不超出指定区域 - 直接对比文本宽度与目标区域宽度:无需依赖溢出框,通过动态调整字号直到文本宽度刚好适配区域(或达到最小字号限制)
- 强制单行属性:即使意外触发换行规则,也能通过属性锁定保持单行
- 计算居中位置:根据目标区域的坐标和尺寸,计算文本的居中偏移量,实现水平与垂直居中
修正后的代码
var doc = activeDocument; var piRef = doc.pathItems; var textRefs = doc.textFrames; // 定义目标区域参数:x(左边界)、y(上边界)、宽度、高度 var targetArea = { x: -50, y: 30, width: 60, height: 30 }; // 创建目标区域参考框(可选,用于可视化,实际使用可删除) piRef.rectangle(targetArea.y, targetArea.x, targetArea.width, targetArea.height).name = "TargetArea"; // 1. 创建点文本(默认单行显示) var textFrame = textRefs.pointText([0, 0]); textFrame.contents = "abcdefghijklmnopqrstuvwxy"; // 25字符测试文本 // 2. 设置文本核心属性:强制不换行、段落居中 var textRange = textFrame.textRange; textRange.characterAttributes.noBreak = true; // 锁定单行,禁止换行 textRange.paragraphAttributes.justification = Justification.CENTER; // 文本居中对齐 // 3. 动态调整字号至最大适配尺寸 var maxFontSize = 200; var minFontSize = 10; // 最小字号限制,避免无限缩小 var fontSize = maxFontSize; textRange.characterAttributes.size = fontSize; // 循环缩小字号,直到文本宽度≤目标区域宽度,或达到最小字号 while (textFrame.width > targetArea.width && fontSize > minFontSize) { fontSize--; textRange.characterAttributes.size = fontSize; } // 4. 计算并设置文本居中位置(适配Illustrator向上的y轴坐标系) var centerX = targetArea.x + (targetArea.width - textFrame.width) / 2; var centerY = targetArea.y - (targetArea.height - textFrame.height) / 2; textFrame.position = [centerX, centerY];
关键改动说明
- 点文本替代区域文本:彻底规避自动换行逻辑,完美匹配“文本不得换行”的需求
- 直接检测文本宽度:通过
textFrame.width获取文本实际宽度,对比目标区域宽度调整字号,逻辑更可靠高效 - 强制不换行属性:
noBreak = true确保极端长度或特殊字符场景下也不会触发换行 - 精准居中计算:结合Illustrator坐标系特性,计算文本的居中偏移量,实现视觉上的完美居中
内容的提问来源于stack exchange,提问作者James Sprow
相关产品推荐
相关产品推荐

