-
-
Save creold/4a6f3c4ad0174d9ad5f6463ba5c47696 to your computer and use it in GitHub Desktop.
| //@target Illustrator | |
| // script.name = textBlockLive.jsx; | |
| // script.description = converts selected point textFrames into a Block of Text; | |
| // script.required = one document with at least two selected Point Text frames; | |
| // script.parent = carlos canto // 12/4/11; Update 03/15/205 added User Defined Units, cosmetics | |
| // script.modification = sergey osokin // 08/12/23; keep text editable, sort texts by Y, cosmetics | |
| // script.elegant = false; | |
| function main() { | |
| if (!app.documents.length) { | |
| alert("There are no open documents"); | |
| return; | |
| } | |
| var sel = app.selection; | |
| var tfs = getTextFrames(selection); | |
| if (tfs.length < 2) { | |
| alert("Select at least 2 Point Text Frames before running"); | |
| return; | |
| } | |
| // Sort array by Y and X positions | |
| tfs.sort(function (a, b) { | |
| return comparePosition(b.top, a.top, a.left, b.left) | |
| }); | |
| var width = prompt("Enter desired Text Block width including Units", '300 pt', "Text Block"); | |
| if (width == null) return; | |
| var widthUV = new UnitValue(width); | |
| if (widthUV.type == '?') { | |
| alert('Units were not provided, try again...'); | |
| return; | |
| } | |
| var widthPts = widthUV.as("pt") // convert to points | |
| var spacing = prompt("Enter spacing including Units", '3 mm', "Text Block"); // text lines spacing in mm | |
| if (spacing == null) return; | |
| var spcingUV = new UnitValue(spacing); | |
| if (spcingUV.type == '?') { | |
| alert('Units were not provided, try again...'); | |
| return; | |
| } | |
| var spacingPts = spcingUV.as("pt") // convert to points | |
| var blockGrp = selection[0].layer.groupItems.add(); // add a group to final output | |
| blockGrp.name = "Text Block"; | |
| var left = 0; | |
| var top = 0; | |
| var firstTop = 0; | |
| for (var i = tfs.length - 1; i >= 0; i--) { // loop thru selection | |
| var tf = tfs[i]; | |
| var iText = tf.duplicate(blockGrp, ElementPlacement.PLACEATEND); // duplicate text | |
| iText.selected = false; // deselect it | |
| var iOutlined = iText.createOutline(); // create outlines | |
| var perCent = widthPts / iOutlined.width * 100; // get scaling percentage, based on desired width of block | |
| var scaleMatrix = app.getScaleMatrix(perCent, perCent); | |
| iOutlined.remove(); | |
| iText = tf.duplicate(blockGrp, ElementPlacement.PLACEATEND); | |
| iText.selected = false; | |
| iText.transform(scaleMatrix); | |
| iOutlined = iText.duplicate().createOutline(); | |
| var deltaX = iText.left - iOutlined.left; | |
| var deltaY = iText.geometricBounds[1] - iOutlined.geometricBounds[1]; | |
| iText.left = left + deltaX; | |
| iText.top = top + deltaY + iOutlined.height + spacingPts; | |
| top = iText.top - deltaY; | |
| if (i == 0) firstTop = tf.top + deltaY; | |
| iOutlined.remove(); | |
| } | |
| blockGrp.position = [tf.left + tf.width + 40, firstTop]; | |
| } | |
| // Get TextFrames array from collection | |
| function getTextFrames(coll) { | |
| var tfs = []; | |
| for (var i = 0, len = coll.length; i < len; i++) { | |
| if (/text/i.test(coll[i].typename)) | |
| tfs.push(coll[i]); | |
| else if (/group/i.test(coll[i].typename)) | |
| tfs = tfs.concat(getTextFrames(coll[i].pageItems)); | |
| } | |
| return tfs; | |
| } | |
| // Compare position of two objects | |
| function comparePosition(a1, b1, a2, b2) { | |
| return a1 == b1 ? a2 - b2 : a1 - b1; | |
| } | |
| try { | |
| main(); | |
| } catch (e) {} |
Does anyone know of a similar script for Photoshop?
@oldgold1877 I will think about your question about the Adobe Photoshop version.
Added Photoshop version: https://github.com/creold/photoshop-scripts/blob/master/README.md#textblock
More about PS script in Telegram channel.
Added Photoshop version: https://github.com/creold/photoshop-scripts/blob/master/README.md#textblock
This is fantastic. You are a star π
This is amazing. Thanks πππ
Nice one bro
Nice one Thanks.
Latest Textblock script versions:
for Adobe Illustrator
for Adobe Photoshop
thx, well done
pls make the corel draw
@shivverma001 thank you for your interest in the script for Adobe Illustrator. I don't work in CorelDRAW and have no knowledge of Visual Basic for writing macros.
Nice one Thanks.
Perfect script
@creold Nice one thanks!