adobe

Adobe 系列软件插件脚本开发

一直不知道Adobe系列软件是有大量接口,而且对第三方插件开发是非常友好的,直到前段时间,帮助做InDesign的排版,发现大量重复的动作,于是想利用程序帮生成修改idml,然后偶然才发现InDesign原本支持脚本,更是对插件开发非常之友好,大量完整的文档,demo可以参考,官方甚至还有专门的开发工具,插件商店,可惜,插件非常少,官网插件商店也很少,大部分都是前几年开发的,能不能用都两说。非常奇怪,也许懂设计的大部分对程序开发天然排斥,二搞代码的也没有使用这些设计软件的需求。

于是乎,放弃之前的思路(从导出文件入手),开始搞脚本,插件,但是国内这方面的资料,技术凤毛麟角,google中反复搜索,数的见的几篇文章,大部分还是国外资料,现在此整理列出,方便后来者使用。

Adobe 的脚本语言分3种,VBScript,JavaScript以及AppleScript,VBScript 是运行于win系统,Apple运行于MAC,JavaScript两边通用,所以,大部分都会使用JavaScript去开发。

一. 国内写的比较容易理解全面的一个入门介绍文章是:

Adobe CEP 扩展开发教程 「 0 」

Adobe CEP 扩展开发教程 「 1 」Hello World!

Adobe CEP 扩展开发教程 「 2 」CEP 技术概览

Adobe CEP 扩展开发教程 「 3 」API 的使用

Adobe CEP 扩展开发教程 「 4 」签名与打包

二. 收集的一些文档

三. 演示脚本

https://github.com/richardharrington/indesign-scripts

四. 官方的插件商店(可以下载免费插件参考)

https://exchange.adobe.com/creativecloud.indesign.html#product

五. ExtendScript Toolkit(方便调试脚本)

https://www.adobe.com/devnet/scripting/estk.html

如果有前端基础,基本简单熟悉ExtendScript 之后,就可以进行adobe插件的开发。

主要的难点是adobe的接口太多,需要了解各种adobe的命名,比如获取当前选择的图层,需要这样使用 :

var myDoc = app.activeDocument.selection ;

获取当前页面需要这样:

 var myPage = app.activeWindow.activePage; 

InDesign 有左右页面之分,所以,如果获取元素的定位还需要判断左右:

//获取页面范围
 function myGetBounds(myDocument, myPage){
     //页面宽度
     var myPageWidth = myDocument.documentPreferences.pageWidth;
     //页面高度
     var myPageHeight = myDocument.documentPreferences.pageHeight
     if(myPage.side == PageSideOptions.leftHand){
         var myX2 = myPage.marginPreferences.left;
         var myX1 = myPage.marginPreferences.right;
     }
     else{
         var myX1 = myPage.marginPreferences.left;
         var myX2 = myPage.marginPreferences.right;
     }
     //页面上边界点
     var myY1 = myPage.marginPreferences.top;
     //页面右起点
     var myX2 = myPageWidth - myX2;
     //页面下边界点
     var myY2 = myPageHeight - myPage.marginPreferences.bottom;
     return [myY1, myX1, myY2, myX2];
 }

还有比较不理解的是PhotoShop 有很多特殊接口可以使用,而其他,InDesign 还算好些,AI 则很多接口是无效的,就是说,大部分代码是通用的,但是PS功能更多,可以控制的东西更全面,而同样的功能AI可能完全无法实现。可能因为大部分人都是使用PS多,而AI,ID使用少,所以干脆接口都懒得加了,而且github上面的AI,ID脚本用上古形容毫不过分,看时间都是10年前后。好在大部分都还兼容。

总体来说,熟悉之后,可以做很多事情,包括自动导入,导出,AI,PS,ID之间相互唤醒自动执行一些东西,基本来说,一些简单重复的操作都有办法写出插件。

比如这段时间开发这个插件:

可以导入文本内容,包含文字的格式,然后在排版时候,方便的点击即可以直接导入对应文本,可以自动更新链接,方便AI那边修改之后自动同步,还可以将ID每次修改完的页面生成jpg图片,自动导入AI对应的文件,作为半透明的背景图片,方便AI调整时候看到效果,还可以自动翻译选中的文本,方便核对。

基本可以节约30%的时间,对于一个喜欢创造的设计师来说,可能最讨厌的就是重复性的工作。

Tagged , , ,

发表评论

电子邮件地址不会被公开。 必填项已用*标注