Я могу удалить слой по имени:
var myDoc = app.activeDocument;
var myLayers = myDoc.layers;
var myLayer = myLayers["layer name"];
myLayer.remove();
или по порядку укладки:
var myLayer = myLayers[1];
myLayer.remove();
и я знаю, как найти и заменить текст скриптом, поэтому я пытаюсь найти способ объединить эти два и найти строку, а затем удалить слой, на котором находится строка, поскольку я не могу использовать имя слоя или порядок наложения. Я пытаюсь научиться писать сценарии по ходу дела, поэтому это может оказаться невозможным (тогда кто-то скажет, что это невозможно, было бы полезно), и мой сценарий, вероятно, полон проблем... но это то, что я пытался собрать, и это не работает. не работает, вот и прошу помощи.
var myDoc = app.activeDocument;
var search_string = "words I am trying to search for";
var text_frames = myDoc.textFrames;
if (text_frames.length > 0)
{
for (var i = 0 ; i < text_frames.length; i++)
{
var this_text_frame = text_frames[i];
if (this_text_frame = search_string.contents)
{
this_text_frame.remove();
}
}
}
Это будет работать до тех пор, пока есть непротиворечивый фрагмент текста для поиска. Может применяться к действию и группироваться.
Обратите внимание, что он зацикливается в обратном порядке. Это обычная стратегия при зацикливании элементов, которые будут удалены из массива. В противном случае сокращение длины массива будет мешать будущим циклам цикла.
Используя метод match, вы можете увидеть, находится ли строка где-либо в пределах содержимого.
Метод match также принимает объект RegExp (регулярное выражение). Это будет полезно, если ваш текст поиска немного изменится, но будет следовать шаблону.
var doc, texts, i, count, find;
find = "MyString"; // Replace with your own string
doc = activeDocument;
texts = doc.textFrames;
count = texts.length;
for (i=count-1; i>0; i--)
{ if (texts[i].contents.match (find) == find)
{ texts[i].remove ();
}
}
Один из способов — просто найти и заменить, ничем не заменить и запустить этот скрипт, чтобы удалить все пустые текстовые фреймы.
Written By Łukasz Wieczorek - hellowoo.com
you can destribute this freely via creative commons(http://creativecommons.org/licenses/by-sa/3.0/)
but leave this message in tact, or give credit to original script.
var numberOfEmptyTextBoxes = 0;
var layersWithNoText = new Array();
if ( app.documents.length > 0 ) {
for ( i = 0; i < app.activeDocument.textFrames.length; i++ ) {
text = app.activeDocument.textFrames[i].textRange;
numWords = app.activeDocument.textFrames[i].words.length;
if (numWords == 0){
layersWithNoText.push(app.activeDocument.textFrames[i]);
numberOfEmptyTextBoxes++;
}
}
if(numberOfEmptyTextBoxes > 0){
alert("You have " + numberOfEmptyTextBoxes + " empty text boxes. They will be deleted.");
}
removeTextLayersWithNoContent(layersWithNoText);
}
function removeTextLayersWithNoContent(layersWithNoText) {
var layersWithNoText = layersWithNoText;
for (var i = 0; i < layersWithNoText.length; i++) {
var currentIndex = layersWithNoText[i];
layersWithNoText[i].remove();
};
}
Скопируйте и вставьте это и сохраните как .jsx
К сожалению, в Illustrator нет таких надежных методов поиска, как в InDesign.
пользователь9447
пользователь9447
пользователь9447