首先:我不是程序员。只需使用代码并尝试使其适用于特定任务:
这是我为了在600多个pdf文件中插入文件名的文本而制作的脚本。这假设适用于所选文件夹中的所有文件。
问题:Illustrator崩溃。
第一个测试代码,经过一些编辑后的文件Illustrator崩溃,所以我尝试在每次保存后引入延迟,以减慢批处理过程。
$ .setTimeout(function(){sourceDoc.close(SaveOptions.SAVECHANGES)},1000);
不知道接下来该做什么。如果我删除这一行,代码可以工作:sourceDoc.close(SaveOptions.SAVECHANGES);
以下是完整的脚本:
var destFolder, sourceFolder, files, fileType, sourceDoc, layers, writeText, finLabel;
// Select the source folder.
sourceFolder = Folder.selectDialog( 'Select the folder with Illustrator files you want to convert to PNG', '~' );
// If a valid folder is selected
if ( sourceFolder != null )
{
files = new Array();
fileType = prompt( 'Select type of Illustrator files to you want to process. Eg: *.ai', '*.pdf' );
// Get all files matching the pattern
files = sourceFolder.getFiles( fileType );
if ( files.length > 0 )
for ( i = 0; i < files.length; i++ )
{
sourceDoc = app.open(files[i]); // returns the document object
layers = unlock();
writeText = getFilename();
finLabel = remText();
sourceDoc.close(SaveOptions.SAVECHANGES); //if save command line is deleted the code works WTF???
$.setTimeout(function () {sourceDoc.close(SaveOptions.SAVECHANGES)}, 1000); // still crashes using delay ...
}
//alert( 'Files are saved as PNG in ' + destFolder );
else
{
alert( 'No matching files found' );
}
}
function unlock()
{
//get the total number of layers in the active document
doc = app.activeDocument;
var totalLayers = doc.layers.length;
//looping on layers to create one artboard per layer
for ( var i = 0 ; i < totalLayers ; i++){
var currentLayer = doc.layers[i];
//We don't want to deal with hidden layers
if(currentLayer.visible == false) continue;
//Unlock the layer if needed
currentLayer.locked = false;
}
}
function getFilename()
{
// Write text
var pointTextRef = app.activeDocument.textFrames.add();
pointTextRef.contents = app.activeDocument.name + "\n" + "YBS";
pointTextRef.top = 0;
pointTextRef.left = 0;
app.activeDocument.textFrames[0].textRange.characterAttributes.textFont=app.textFonts[31];
}
function remText()
{
// This works for search and replace :))))))
var active_doc = app.activeDocument;
var search_string = /_Template.pdf/gi; // g for global search, remove i to make a case sensitive search
var replace_string = '';
var text_frames = active_doc.textFrames;
if (text_frames.length > 0)
{
for (var i = 0 ; i < text_frames.length; i++)
{
var this_text_frame = text_frames[i];
var new_string = this_text_frame.contents.replace(search_string, replace_string);
if (new_string != this_text_frame.contents)
{
this_text_frame.contents = new_string;
}
}
}
}
关于是什么让Illustrator崩溃的任何想法?
注意:打开第一个文件后应用程序崩溃。
感谢您的帮助!
答案 0 :(得分:1)
你应该改变一些事情并尝试:
$.setTimeout
getFiles(FileType)
)unlock()
,getFilename()
和remText()
没有返回值,因此您不需要将结果传递给变量var
添加到您的for循环for(var i = 0; i < ...)
for
for (var i = files.length; i >= 0; i-- ){}
循环
醇>
答案 1 :(得分:1)
删除此行后:
$.setTimeout(function () {sourceDoc.close(SaveOptions.SAVECHANGES)}, 1000);
代码在一批中处理499个文件:)
在尝试保存损坏的pdf时,Illustrator崩溃了。
@ fabiantheblind 谢谢你的帮助!