Téléverser les fichiers vers "TextBlock"
This commit is contained in:
parent
596173e25a
commit
07ffb811b2
103
TextBlock/textBlock.jsx
Normal file
103
TextBlock/textBlock.jsx
Normal file
@ -0,0 +1,103 @@
|
||||
//@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) {}
|
||||
Loading…
Reference in New Issue
Block a user