Illustrator - 在textpath脚本中批量插入文件名会使Illustrator崩溃

时间:2014-09-28 21:30:00

标签: javascript adobe-illustrator extendscript

首先:我不是程序员。只需使用代码并尝试使其适用于特定任务:

这是我为了在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崩溃的任何想法?

注意:打开第一个文件后应用程序崩溃。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

你应该改变一些事情并尝试:

  1. extendscript
  2. 中没有$.setTimeout
  3. 检查您的文件过滤器是否真的有效(getFiles(FileType)
  4. 您的函数unlock()getFilename()remText()没有返回值,因此您不需要将结果传递给变量
  5. 尝试pdf文件的一部分,而不是全部600
  6. var添加到您的for循环for(var i = 0; i < ...)
  7. 尝试从文件列表for
  8. 的末尾开始for (var i = files.length; i >= 0; i-- ){}循环

答案 1 :(得分:1)

删除此行后:

 $.setTimeout(function () {sourceDoc.close(SaveOptions.SAVECHANGES)}, 1000); 

代码在一批中处理499个文件:)

在尝试保存损坏的pdf时,Illustrator崩溃了。

@ fabiantheblind 谢谢你的帮助!