应用程序 Java 脚本

简介

Adobe Creative Suite 应用程序(Acrobat、Photoshop、Illustrator 和 InDesign)可通过 JavaScript(一种经应用程序解释和执行的脚本语言)编写扩展脚本。所有四种应用程序都提供相似的整体接口用于配合 JavaScript 工作,尽管每一种应用程序都提供一套不同的 JavaScript 功能来控制应用程序的功能

每一种应用程序的 JavaScript 编程界面都记录在应用程序的软件开发工具包中。软件开发工具包可从 Adobe 官网上获取。Adobe Creative Suite 软件包内含"ExtendScript Toolkit"应用程序,对开发和调试 Adobe Creative Suite 应用程序的 JavaScript 脚本很有帮助。

上面提到的四种应用程序的 Switch 配置程序允许发送一个 JavaScript 脚本到应用程序供应用程序执行。结合 Switch 的内置能力,该功能可对 Adobe Creative Suite 应用程序进行有力的控制。

注: 在该话题剩余部分中,"应用程序"表示上述四个 Adobe Creative Suite 应用程序之一,"配置程序"表示控制在考虑中的应用程序的 Switch 配置程序。

阶段

配置程序定义了相应的应用程序在以下三个连续的阶段要执行的动作:

每一阶段需要的动作都是单独定义的,并可从以下项中选择:

选择的动作决定了在继续配置动作时显示哪些下级属性。也就是说,每个选项都有自己特有的一组属性。

下表描述了"使用脚本"选项的属性;内置选项的属性在每个配置程序中单独描述。

指定用户脚本的属性

下表列出了当每一个动作阶段选择"使用脚本"时该阶段会显示的属性。

属性

描述

脚本文件

含有该阶段应用程序要执行的 JavaScript 脚本的文本文档

参数 1

第一个要传递到脚本的参数(或为空)

参数 2

第二个要传递到脚本的参数(或为空)

参数 3

第三个要传递到脚本的参数(或为空)

参数 4

第四个要传递到脚本的参数(或为空)

参数 5

第五个要传递到脚本的参数(或为空)

系统总是显示五个变量,因为没有机制决定脚本需要几个变量。

编写用户脚本

要编写用户脚本,只需提供在脚本文件主体中需要执行的 JavaScript 语句。若您的脚本发生错误,脚本应该为相应的错误消息设置 $error 变量;否则脚本应该不处理该 $error 变量。下表列出了典型的编码样式。

以下特殊全局参数在您的脚本执行之前已经被定义,这样脚本才可使用变量的值;在一些情况下(见变量描述注释),您的脚本应该设置或更新变量内容。

变量

描述

$arg1

第一个传递到脚本的参数(如无则传递空字符串)

$arg2

第二个传递到脚本的参数(如无则传递空字符串)

$arg3

第三个传递到脚本的参数(如无则传递空字符串)

$arg4

第四个传递到脚本的参数(如无则传递空字符串)

$arg5

第五个传递到脚本的参数(如无则传递空字符串)

$infile

输入文件的绝对路径,包括名称和扩展名;该路径在"打开"动作附加的脚本中使用得最多

$doc

当前激活的文档,即"打开"动作打开的文档;$doc 在附加到"打开"动作的脚本中(或"打开"动作失败时)为空

注:
  • 使用 $doc 而非"这个"来指代当前激活文档。
  • 若在 InDesign 或 InDesign 服务器配置程序中使用自定义的"打开"脚本来打开或创建多个文档,脚本应该明确设置 $doc 的值,以确保配置程序处理正确的文档。对于其他 Adobe 应用程序,$doc 变量会自动设置以包含激活文档。

$outfolder

输出文件夹的绝对路径,包括名称和扩展名;该路径在"保存"动作附加的脚本中使用得最多

$filename

输入(和输出)文件的文件名(不含扩展名)

$extension

输入文件的文件扩展名,若没有的话,则该变量输入文件 Mac 文件类型的相应文件扩展名

$outfiles

传入的值和该变量无关

若您的脚本被附加到"保存"动作,脚本应将该阵列变量的内容设置为脚本生成的输出文件的绝对路径

$jobfolder

传入的值和该变量无关

若您的脚本被附加到"保存"动作,脚本将该变量的内容设置为以下值:

  • 空字符串:每一个输出文件都作为单独的工作沿着输出连接移动

  • 所需工作文件夹名称:所有输出文件都放在指定名称的单个工作文件夹中

$error

若执行一个更早的阶段时发生了错误,或准备执行该阶段时发生了错误,该变量含有相应的错误消息,否则变量值为空(不是空字符串;空字符串表示错误确实发生但是未生成有意义的错误消息——该情况为错误操作但也可能发生)

若您的脚本发生错误,脚本应为相应的错误消息设置 $error 变量(即消息是非空字符串);否则脚本不处理该 $error 变量。

注: 若 $error 已经设置,脚本会使工作失败并向"错误"级别的数据输出连接移动工作。若没有错误连接,该工作被移动到问题工作文件夹。

请注意,用户可通过设置 $status 变量决定工作应移动到哪里(错误连接或问题工作文件夹)。有关更多信息,请参阅以下说明。

$status $status 允许您通过指定错误输出工作的移动目的地来控制错误工作的输出行为。您也可指定在出现关键错误时停止脚本继续处理。
注: 若 $error 为"空",则忽视 $status 的值。
可能的值:
  • error (默认值):失败的工作会被移动到错误连接;若未找到错误连接,工作会被移动到问题文件夹。
  • failJob:失败的工作会被发送到问题文件夹。
  • failProcess:若发生问题,所有处理都会停止。

错误处理

以下为附加到命令动作的用户脚本出错时,处理错误的典型编码样式:

if ($error == null) 
{ 
    try 
    { 
        // statements to be executed by this script 
        // $doc.ApplicationDependentFunction(); 
    } 
    catch( e ) 
    { 
        $error = e.description; 
        $status = failJob;
        // This will move the failed job to Problem Jobs folder. If not set, the
          default is the “Error” level data connection.
        $doc.closeDoc( Application Specific Parameters ); 
        // close any other resources used in the try block 
    }
}
InDesign 和 Illustrator 配置程序会生成一个 XML 日志文件。示例如下:
<AdobeConfiguratorLog>       
 <FlowElementName>ConfiguratorFlowElementName</FlowElementName> 
   <Job>     
     <Name>NoFontPackage</Name>     
     <Status>Error</Status>
     <StatusMessage>Error Message String</StatusMessage>
     <MissingFonts>             
        <Font>Somora</Font>             
        <Font>XBAND Rough</Font>     
      </MissingFonts> 
   <Job>
</AdobeConfiguratorLog> 
注: 该日志是以传入工作名称命名的XML文件。

以下为处理 Adobe Acrobat 应用程序时的典型编码样式:

// Acrobat is used to make a summary of the annotations resulting in a file that shows you the page 
// content and the annotations per page.
// No arguments are required.

if($error == null)
{
	
	try
	{
		var title = $doc.documentFileName + " summary"
		$outfile = $outfolder + '/' + $filename + "_summary.pdf";
		$doc.ANsummarize($doc, title, ANSB_Page, null, $outfile, null, false, true, false, false, false, false);
		$outfiles.push($outfile);
	}
	catch(theError)
	{
		$error = theError;
		$doc.closeDoc( {bNoSave : true} );
	}
}

$error

获取更多信息?

有关脚本的更多信息,请参阅 Enfocus 网站文档