Copy link to clipboard
Copied
There is a feature where you can automatically size the text-box to the text under Area Type Options > Auto Size.
Is there a feature that does exactly this but the opposite? Meaning the text changes size to fit the text-box. I've laid out an example of what I mean.
The reason I ask is whenever I lay out text, I already have an idea of how big I want the box to be. Once I put in text, then I have to waste time figuring out a font-size that makes all the text fit the box appropriately. It would be a God Send if there were an Auto Size feature for changing text-size and not the text-box.
Other Threads With My Issue Please Read
https://old.reddit.com/r/AdobeIllustrator/comments/n5b3n4/autosize_text_to_fit_textframe_i_found_how...
I'm hoping after 2-3 years someone has created a script or an update implements this.
Please do not hesitate to ask for clarification.
Copy link to clipboard
Copied
// fit_text_to_frame.jsx
// resizes text larger/smaller to fit the selected text frame(s)
// (the text frame must be fully selected; point text and non-text items are ignored)
// current limitations: this assumes all characters are same size; leading is not adjusted
(function() {
var MIN_SIZE = 1, MAX_SIZE = 1296 // practical limits, in pts
var MIN_STEP = 0.1 // the smaller this is, the more precise (and slower) the fit
function fitTextToFrame(textFrame) {
// textFrame : TextFrame -- path or area text
if (textFrame.typename !== 'TextFrame' || textFrame.kind === TextType.POINTTEXT) { return }
var length = textFrame.contents.replace(/\s+$/, "").length // length of printable text (ignores trailing whitespace)
if (length === 0) { return } // skip empty text frame
// overflow checker; this checks length of printable text to index of last visible character in frame
var hasOverflow = function() {
var lastLine = textFrame.lines[textFrame.lines.length-1]
if (!lastLine) { return true } // no lines visible (frame is too small)
var visibleLength = (lastLine.characters[0].characterOffset + lastLine.length - 1)
return visibleLength < length
}
// word count checker; assuming no overflow, this detects large words that are force-wrapped onto >1 line
var hasSplitWords = function() {
var wc = 0
for (var i = 0; i < textFrame.lines.length; i++) {
wc += textFrame.lines[i].words.length
}
return wc > textFrame.words.length
}
// (caution: do not use JS’s +=, -=, *=, /= operators on AI properties as JSX doesn't handle them right)
var style = textFrame.textRange.characterAttributes
var size = style.size
// 1. resize text so it is just overflowing
while ((hasOverflow() || hasSplitWords()) && size >= MIN_SIZE * 2) { // decrease size until no overflow
size /= 2.0
style.size = size
}
if ((hasOverflow() || hasSplitWords())) { return } // hit minimum size and it's still overflowing, so give up
while (!(hasOverflow() || hasSplitWords()) && size <= MAX_SIZE / 2) { // increase size until text overflows
size *= 2.0
style.size = size
}
if (!(hasOverflow() || hasSplitWords())) { return } // hit maximum size and it hasn't overflowed, so give up
// 2. now do binary search for the largest size that will just fit the text frame
var step = size / 2.0
while (step > MIN_STEP) {
step /= 2.0
size += (hasOverflow() || hasSplitWords()) ? -step : step
style.size = size
}
// 3. if text ends up overflowing after last step, step it back down
while ((hasOverflow() || hasSplitWords())) {
style.size = size - step
step *= 1.1
}
}
var items = app.activeDocument.selection
for (var i = 0; i < items.length; i++) { // iterate over currently selected items
fitTextToFrame(items[i])
}
})()
Copy link to clipboard
Copied
Adobe Express is closer to the behavior you are looking for. That may help.
Find more inspiration, events, and resources on the new Adobe Community
Explore Now